Andrew Geissler | 5f35090 | 2021-07-23 13:09:54 -0400 | [diff] [blame] | 1 | From 76ae0badd3fd7c8653fa4d3c78d2dcfcec51d23d Mon Sep 17 00:00:00 2001 |
| 2 | From: Karel Zak <kzak@redhat.com> |
| 3 | Date: Wed, 14 Jul 2021 17:25:57 +0200 |
| 4 | Subject: [PATCH] login: fix close_range() use |
| 5 | |
| 6 | This new syscall comes with three arguments (see kernel commit |
| 7 | 278a5fbaed89dacd04e9d052f4594ffd0e0585de). Not sure why util-linux |
| 8 | assume only two. |
| 9 | |
| 10 | Upstream-Status: Backport [https://github.com/karelzak/util-linux/commit/b8d99a618baffb4fc03cda4c40e29778b6d77ad4] |
| 11 | Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1981729 |
| 12 | Signed-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 | |
| 19 | diff --git a/include/fileutils.h b/include/fileutils.h |
| 20 | index 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 |
| 35 | diff --git a/lib/fileutils.c b/lib/fileutils.c |
| 36 | index 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 |
| 48 | diff --git a/login-utils/login.c b/login-utils/login.c |
| 49 | index 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 | -- |
| 62 | 2.32.0 |