From 01a38448404868396765f1d644386b7addcdfba4 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 29 Jun 2011 04:13:39 +0200 Subject: [PATCH] --- yaml --- r: 256862 b: refs/heads/master c: bb188d7e64deb0e9cf13a99f44ae0065de5352d6 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/exec.c | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index c91a9b2e607a..55546d9e2027 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 479bf98c1c29b40d86e40a4e6e4944c2f03d9493 +refs/heads/master: bb188d7e64deb0e9cf13a99f44ae0065de5352d6 diff --git a/trunk/fs/exec.c b/trunk/fs/exec.c index c3d517bfdd27..b08367abf30e 100644 --- a/trunk/fs/exec.c +++ b/trunk/fs/exec.c @@ -1358,6 +1358,7 @@ int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs) unsigned int depth = bprm->recursion_depth; int try,retval; struct linux_binfmt *fmt; + pid_t old_pid; retval = security_bprm_check(bprm); if (retval) @@ -1371,6 +1372,11 @@ int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs) if (retval) return retval; + /* Need to fetch pid before load_binary changes it */ + rcu_read_lock(); + old_pid = task_pid_nr_ns(current, task_active_pid_ns(current->parent)); + rcu_read_unlock(); + retval = -ENOENT; for (try=0; try<2; try++) { read_lock(&binfmt_lock); @@ -1390,7 +1396,8 @@ int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs) bprm->recursion_depth = depth; if (retval >= 0) { if (depth == 0) - ptrace_event(PTRACE_EVENT_EXEC, 0); + ptrace_event(PTRACE_EVENT_EXEC, + old_pid); put_binfmt(fmt); allow_write_access(bprm->file); if (bprm->file)