From 5bc9d928683932c24f516bd797171e69d6976e7c Mon Sep 17 00:00:00 2001 From: Max Filippov Date: Mon, 27 Dec 2021 11:58:28 +0000 Subject: [PATCH] all: fix adjustment of /proc/$pid/cmdline by single binary When configured with --enable-single-binary tools issue incorrect prctl: prctl(PR_SET_KEEPCAPS, ...) = -1 EINVAL (Invalid argument) PR_SET_MM_ARG_START is not a prctl 'option' parameter, it's 'arg2' parameter for the option PR_SET_MM. It also has to have 'arg4' and 'arg5' set to 0 explicitly, otherwise the kernel also returns -EINVAL. * src/coreutils.c (launch_program): Fix prctl arguments. * NEWS: Mention the improvement. Fixes https://bugs.gnu.org/52800 --- NEWS | 4 ++++ src/coreutils.c | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 811e27e3af..72453dc4b5 100644 --- a/NEWS +++ b/NEWS @@ -46,6 +46,10 @@ GNU coreutils NEWS -*- outline -*- sort --debug now diagnoses issues with --field-separator characters that conflict with characters possibly used in numbers. + root invoked coreutils, that are built and run in single binary mode, + now adjust /proc/$pid/cmdline to be more specific to the utility + being run, rather than using the general "coreutils" binary name. + * Noteworthy changes in release 9.0 (2021-09-24) [stable] diff --git a/src/coreutils.c b/src/coreutils.c index 6db5a8f05c..63dfa228cb 100644 --- a/src/coreutils.c +++ b/src/coreutils.c @@ -120,8 +120,9 @@ launch_program (char const *prog_name, int prog_argc, char **prog_argv) #endif #if HAVE_PRCTL && defined PR_SET_MM_ARG_START /* Shift the beginning of the command line to prog_argv[0] (if set) so - /proc/pid/cmdline reflects the right value. */ - prctl (PR_SET_MM_ARG_START, prog_argv[0]); + /proc/$pid/cmdline reflects a more specific value. Note one needs + CAP_SYS_RESOURCE or root privileges for this to succeed. */ + prctl (PR_SET_MM, PR_SET_MM_ARG_START, prog_argv[0], 0, 0); #endif exit (prog_main (prog_argc, prog_argv)); -- 2.47.2