blob: 7a47597bd6090aa00e51c77127acee3e6e9485f1 [file] [log] [blame]
Andrew Geissler5f350902021-07-23 13:09:54 -04001From 76ae0badd3fd7c8653fa4d3c78d2dcfcec51d23d Mon Sep 17 00:00:00 2001
2From: Karel Zak <kzak@redhat.com>
3Date: Wed, 14 Jul 2021 17:25:57 +0200
4Subject: [PATCH] login: fix close_range() use
5
6This new syscall comes with three arguments (see kernel commit
7278a5fbaed89dacd04e9d052f4594ffd0e0585de). Not sure why util-linux
8assume only two.
9
10Upstream-Status: Backport [https://github.com/karelzak/util-linux/commit/b8d99a618baffb4fc03cda4c40e29778b6d77ad4]
11Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1981729
12Signed-off-by: Karel Zak <kzak@redhat.com>
13---
14 include/fileutils.h | 4 ++--
15 lib/fileutils.c | 2 +-
16 login-utils/login.c | 2 +-
17 3 files changed, 4 insertions(+), 4 deletions(-)
18
19diff --git a/include/fileutils.h b/include/fileutils.h
20index ad54b95..f86426b 100644
21--- a/include/fileutils.h
22+++ b/include/fileutils.h
23@@ -82,9 +82,9 @@ static inline struct dirent *xreaddir(DIR *dp)
24 # if defined(SYS_close_range)
25 # include <sys/types.h>
26 # ifndef HAVE_CLOSE_RANGE
27-static inline int close_range(unsigned int first, unsigned int last)
28+static inline int close_range(unsigned int first, unsigned int last, int flags)
29 {
30- return syscall(SYS_close_range, first, last);
31+ return syscall(SYS_close_range, first, last, flags);
32 }
33 # endif
34 # define HAVE_CLOSE_RANGE 1
35diff --git a/lib/fileutils.c b/lib/fileutils.c
36index 846b718..a979b03 100644
37--- a/lib/fileutils.c
38+++ b/lib/fileutils.c
39@@ -189,7 +189,7 @@ int main(int argc, char *argv[])
40 ignore_result( dup(STDIN_FILENO) );
41
42 # ifdef HAVE_CLOSE_RANGE
43- close_range(STDERR_FILENO + 1, ~0U);
44+ close_range(STDERR_FILENO + 1, ~0U, 0);
45 # else
46 ul_close_all_fds(STDERR_FILENO + 1, ~0U);
47 # endif
48diff --git a/login-utils/login.c b/login-utils/login.c
49index 7fefd05..94a042d 100644
50--- a/login-utils/login.c
51+++ b/login-utils/login.c
52@@ -1358,7 +1358,7 @@ static void initialize(int argc, char **argv, struct login_context *cxt)
53 #endif
54 }
55 #ifdef HAVE_CLOSE_RANGE
56- close_range(STDERR_FILENO + 1, ~0U);
57+ close_range(STDERR_FILENO + 1, ~0U, 0);
58 #else
59 ul_close_all_fds(STDERR_FILENO + 1, ~0U);
60 #endif
61--
622.32.0