From: Nir Lichtman <nir@lichtman.org>
To: viro@zeniv.linux.org.uk, brauner@kernel.org, jack@suse.cz,
kees@kernel.org, ebiederm@xmission.com,
linux-fsdevel@vger.kernel.org, linux-mm@kvack.org,
linux-kernel@vger.kernel.org
Subject: [PATCH] exec: remove redundant save asides of old pid/vpid
Date: Sat, 1 Feb 2025 08:31:27 +0000 [thread overview]
Message-ID: <20250201083127.GA1185473@lichtman.org> (raw)
Problem: Old pid and vpid are redundantly saved aside before starting to
parse the binary, with the comment claiming that it is required since
load_binary changes it, though from inspection in the source,
load_binary does not change the pid and this wouldn't make sense since
execve does not create any new process, quote from man page of execve:
"there is no new process; many attributes of the calling process remain
unchanged (in particular, its PID)."
Solution: Remove the saving aside of both and later on use them directly
from the current object, instead of via the saved aside objects.
Signed-off-by: Nir Lichtman <nir@lichtman.org>
---
Side-note: Tested this solution with a defconfig x86_64 and an initramfs
with Busybox and confirmed to work fine.
fs/exec.c | 12 +++---------
1 file changed, 3 insertions(+), 9 deletions(-)
diff --git a/fs/exec.c b/fs/exec.c
index 506cd411f4ac..6bb0a7b15f7e 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -1789,15 +1789,8 @@ static int search_binary_handler(struct linux_binprm *bprm)
/* binfmt handlers will call back into begin_new_exec() on success. */
static int exec_binprm(struct linux_binprm *bprm)
{
- pid_t old_pid, old_vpid;
int ret, depth;
- /* Need to fetch pid before load_binary changes it */
- old_pid = current->pid;
- rcu_read_lock();
- old_vpid = task_pid_nr_ns(current, task_active_pid_ns(current->parent));
- rcu_read_unlock();
-
/* This allows 4 levels of binfmt rewrites before failing hard. */
for (depth = 0;; depth++) {
struct file *exec;
@@ -1826,8 +1819,9 @@ static int exec_binprm(struct linux_binprm *bprm)
}
audit_bprm(bprm);
- trace_sched_process_exec(current, old_pid, bprm);
- ptrace_event(PTRACE_EVENT_EXEC, old_vpid);
+ trace_sched_process_exec(current, current->pid, bprm);
+ ptrace_event(PTRACE_EVENT_EXEC,
+ task_pid_nr_ns(current, task_active_pid_ns(current->parent)));
proc_exec_connector(current);
return 0;
}
--
2.39.5
next reply other threads:[~2025-02-01 8:31 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-01 8:31 Nir Lichtman [this message]
2025-02-01 9:40 ` [PATCH] exec: remove redundant save asides of old pid/vpid Kees Cook
2025-02-01 11:03 ` Nir Lichtman
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=20250201083127.GA1185473@lichtman.org \
--to=nir@lichtman.org \
--cc=brauner@kernel.org \
--cc=ebiederm@xmission.com \
--cc=jack@suse.cz \
--cc=kees@kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=viro@zeniv.linux.org.uk \
/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.