]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
exec: Distinguish in_execve from in_exec
authorKees Cook <keescook@chromium.org>
Wed, 24 Jan 2024 19:15:33 +0000 (11:15 -0800)
committerKees Cook <keescook@chromium.org>
Wed, 24 Jan 2024 19:48:52 +0000 (11:48 -0800)
Just to help distinguish the fs->in_exec flag from the current->in_execve
flag, add comments in check_unsafe_exec() and copy_fs() for more
context. Also note that in_execve is only used by TOMOYO now.

Cc: Kentaro Takeda <takedakn@nttdata.co.jp>
Cc: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: Christian Brauner <brauner@kernel.org>
Cc: Jan Kara <jack@suse.cz>
Cc: Eric Biederman <ebiederm@xmission.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: linux-fsdevel@vger.kernel.org
Cc: linux-mm@kvack.org
Signed-off-by: Kees Cook <keescook@chromium.org>
fs/exec.c
include/linux/sched.h
kernel/fork.c

index 39d773021fffd50cd228c3418fcc933305ef126f..d179abb78a1c81e7c67d3f3caae0d6ea5623fbd8 100644 (file)
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -1633,6 +1633,7 @@ static void check_unsafe_exec(struct linux_binprm *bprm)
        }
        rcu_read_unlock();
 
+       /* "users" and "in_exec" locked for copy_fs() */
        if (p->fs->users > n_fs)
                bprm->unsafe |= LSM_UNSAFE_SHARE;
        else
index cdb8ea53c365ba45be4041c887de4c9d1c22afcd..ffe8f618ab869729bd6c888a8a05e45d46a6c7c2 100644 (file)
@@ -920,7 +920,7 @@ struct task_struct {
        unsigned                        sched_rt_mutex:1;
 #endif
 
-       /* Bit to tell LSMs we're in execve(): */
+       /* Bit to tell TOMOYO we're in execve(): */
        unsigned                        in_execve:1;
        unsigned                        in_iowait:1;
 #ifndef TIF_RESTORE_SIGMASK
index 47ff3b35352e0bb4ec040b77241d9cbdcb986ef2..0d944e92a43ffa13bdbcce6c6a28c44bab29ca19 100644 (file)
@@ -1748,6 +1748,7 @@ static int copy_fs(unsigned long clone_flags, struct task_struct *tsk)
        if (clone_flags & CLONE_FS) {
                /* tsk->fs is already what we want */
                spin_lock(&fs->lock);
+               /* "users" and "in_exec" locked for check_unsafe_exec() */
                if (fs->in_exec) {
                        spin_unlock(&fs->lock);
                        return -EAGAIN;