Commit 98611e4e authored by Oleg Nesterov's avatar Oleg Nesterov Committed by Linus Torvalds

exec: kill task_struct->did_exec

We can kill either task->did_exec or PF_FORKNOEXEC, they are mutually
exclusive.  The patch kills ->did_exec because it has a single user.
Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
Acked-by: default avatarKOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Kees Cook <keescook@chromium.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 63e46b95
...@@ -1424,7 +1424,6 @@ static int exec_binprm(struct linux_binprm *bprm) ...@@ -1424,7 +1424,6 @@ static int exec_binprm(struct linux_binprm *bprm)
audit_bprm(bprm); audit_bprm(bprm);
trace_sched_process_exec(current, old_pid, bprm); trace_sched_process_exec(current, old_pid, bprm);
ptrace_event(PTRACE_EVENT_EXEC, old_vpid); ptrace_event(PTRACE_EVENT_EXEC, old_vpid);
current->did_exec = 1;
proc_exec_connector(current); proc_exec_connector(current);
} }
......
...@@ -1239,7 +1239,6 @@ struct task_struct { ...@@ -1239,7 +1239,6 @@ struct task_struct {
/* Used for emulating ABI behavior of previous Linux versions */ /* Used for emulating ABI behavior of previous Linux versions */
unsigned int personality; unsigned int personality;
unsigned did_exec:1;
unsigned in_execve:1; /* Tell the LSMs that the process is doing an unsigned in_execve:1; /* Tell the LSMs that the process is doing an
* execve */ * execve */
unsigned in_iowait:1; unsigned in_iowait:1;
......
...@@ -1226,7 +1226,6 @@ static struct task_struct *copy_process(unsigned long clone_flags, ...@@ -1226,7 +1226,6 @@ static struct task_struct *copy_process(unsigned long clone_flags,
if (!try_module_get(task_thread_info(p)->exec_domain->module)) if (!try_module_get(task_thread_info(p)->exec_domain->module))
goto bad_fork_cleanup_count; goto bad_fork_cleanup_count;
p->did_exec = 0;
delayacct_tsk_init(p); /* Must remain after dup_task_struct() */ delayacct_tsk_init(p); /* Must remain after dup_task_struct() */
copy_flags(clone_flags, p); copy_flags(clone_flags, p);
INIT_LIST_HEAD(&p->children); INIT_LIST_HEAD(&p->children);
......
...@@ -895,8 +895,7 @@ SYSCALL_DEFINE1(times, struct tms __user *, tbuf) ...@@ -895,8 +895,7 @@ SYSCALL_DEFINE1(times, struct tms __user *, tbuf)
* only important on a multi-user system anyway, to make sure one user * only important on a multi-user system anyway, to make sure one user
* can't send a signal to a process owned by another. -TYT, 12/12/91 * can't send a signal to a process owned by another. -TYT, 12/12/91
* *
* Auch. Had to add the 'did_exec' flag to conform completely to POSIX. * !PF_FORKNOEXEC check to conform completely to POSIX.
* LBT 04.03.94
*/ */
SYSCALL_DEFINE2(setpgid, pid_t, pid, pid_t, pgid) SYSCALL_DEFINE2(setpgid, pid_t, pid, pid_t, pgid)
{ {
...@@ -932,7 +931,7 @@ SYSCALL_DEFINE2(setpgid, pid_t, pid, pid_t, pgid) ...@@ -932,7 +931,7 @@ SYSCALL_DEFINE2(setpgid, pid_t, pid, pid_t, pgid)
if (task_session(p) != task_session(group_leader)) if (task_session(p) != task_session(group_leader))
goto out; goto out;
err = -EACCES; err = -EACCES;
if (p->did_exec) if (!(p->flags & PF_FORKNOEXEC))
goto out; goto out;
} else { } else {
err = -ESRCH; err = -ESRCH;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment