|
@@ -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)
|