From: "Eric W. Biederman" <ebiederm@xmission.com>
To: Tycho Andersen <tycho@tycho.pizza>
Cc: "Alexander Viro" <viro@zeniv.linux.org.uk>,
"Christian Brauner" <brauner@kernel.org>,
"Jan Kara" <jack@suse.cz>, "Kees Cook" <kees@kernel.org>,
linux-fsdevel@vger.kernel.org, linux-mm@kvack.org,
linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org,
"Tycho Andersen" <tandersen@netflix.com>,
"Zbigniew Jędrzejewski-Szmek" <zbyszek@in.waw.pl>,
"Aleksa Sarai" <cyphar@cyphar.com>
Subject: Re: [PATCH v2 1/2] exec: add a flag for "reasonable" execveat() comm
Date: Fri, 27 Sep 2024 10:45:58 -0500 [thread overview]
Message-ID: <87ikuhw155.fsf@email.froward.int.ebiederm.org> (raw)
In-Reply-To: <20240927151746.391931-1-tycho@tycho.pizza> (Tycho Andersen's message of "Fri, 27 Sep 2024 09:17:45 -0600")
Tycho Andersen <tycho@tycho.pizza> writes:
> From: Tycho Andersen <tandersen@netflix.com>
>
> Zbigniew mentioned at Linux Plumber's that systemd is interested in
> switching to execveat() for service execution, but can't, because the
> contents of /proc/pid/comm are the file descriptor which was used,
> instead of the path to the binary. This makes the output of tools like
> top and ps useless, especially in a world where most fds are opened
> CLOEXEC so the number is truly meaningless.
>
> Change exec path to fix up /proc/pid/comm in the case where we have
> allocated one of these synthetic paths in bprm_init(). This way the actual
> exec machinery is unchanged, but cosmetically the comm looks reasonable to
> admins investigating things.
Perhaps change the subject to match the code.
> Signed-off-by: Tycho Andersen <tandersen@netflix.com>
> Suggested-by: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
> CC: Aleksa Sarai <cyphar@cyphar.com>
> Link: https://github.com/uapi-group/kernel-features#set-comm-field-before-exec
> ---
> v2: * drop the flag, everyone :)
> * change the rendered value to f_path.dentry->d_name.name instead of
> argv[0], Eric
> ---
> fs/exec.c | 13 ++++++++++++-
> 1 file changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/fs/exec.c b/fs/exec.c
> index dad402d55681..9520359a8dcc 100644
> --- a/fs/exec.c
> +++ b/fs/exec.c
> @@ -1416,7 +1416,18 @@ int begin_new_exec(struct linux_binprm * bprm)
> set_dumpable(current->mm, SUID_DUMP_USER);
>
> perf_event_exec();
> - __set_task_comm(me, kbasename(bprm->filename), true);
> +
> + /*
> + * If fdpath was set, execveat() made up a path that will
> + * probably not be useful to admins running ps or similar.
> + * Let's fix it up to be something reasonable.
> + */
> + if (bprm->fdpath) {
> + BUILD_BUG_ON(TASK_COMM_LEN > DNAME_INLINE_LEN);
> + __set_task_comm(me, bprm->file->f_path.dentry->d_name.name, true);
We can just do this regardless of bprm->fdpath.
It will be a change of behavior on when executing symlinks and possibly
mount points but I don't think we care. If we do then we can add make
it conditional with "if (bprm->fdpath)"
At the very least using the above version unconditionally ought to flush
out any bugs.
It should be 99% application invisible as all an application can see
is argv0. So it is only ps and friends where the comm value is visible.
Eric
next prev parent reply other threads:[~2024-09-27 15:46 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-27 15:17 [PATCH v2 1/2] exec: add a flag for "reasonable" execveat() comm Tycho Andersen
2024-09-27 15:17 ` [PATCH v2 2/2] selftests/exec: add a test to enforce execveat()'s comm Tycho Andersen
2024-09-27 15:45 ` Eric W. Biederman [this message]
2024-09-28 21:56 ` [PATCH v2 1/2] exec: add a flag for "reasonable" execveat() comm Kees Cook
2024-09-30 2:59 ` Eric W. Biederman
2024-09-30 20:10 ` Eric W. Biederman
2024-10-01 13:43 ` Tycho Andersen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87ikuhw155.fsf@email.froward.int.ebiederm.org \
--to=ebiederm@xmission.com \
--cc=brauner@kernel.org \
--cc=cyphar@cyphar.com \
--cc=jack@suse.cz \
--cc=kees@kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=tandersen@netflix.com \
--cc=tycho@tycho.pizza \
--cc=viro@zeniv.linux.org.uk \
--cc=zbyszek@in.waw.pl \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.