diff --git a/[refs] b/[refs] index d367a65947a7..e87c57004f83 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7b102d034c0affc6ee703b576f2496ec6cb81d79 +refs/heads/master: f1671f6d783a2385d32e11f456cbe32f0e4b4b49 diff --git a/trunk/kernel/ptrace.c b/trunk/kernel/ptrace.c index 64191fa09b7e..dfcd83ceee3b 100644 --- a/trunk/kernel/ptrace.c +++ b/trunk/kernel/ptrace.c @@ -604,10 +604,11 @@ int ptrace_traceme(void) ret = security_ptrace_traceme(current->parent); /* - * Set the ptrace bit in the process ptrace flags. - * Then link us on our parent's ptraced list. + * Check PF_EXITING to ensure ->real_parent has not passed + * exit_ptrace(). Otherwise we don't report the error but + * pretend ->real_parent untraces us right after return. */ - if (!ret) { + if (!ret && !(current->real_parent->flags & PF_EXITING)) { current->ptrace |= PT_PTRACED; __ptrace_link(current, current->real_parent); }