reparent_thread: fix the "is it traced" check
reparent_thread() uses ptrace_reparented() to check whether this thread is ptraced, in that case we should not notify the new parent. But ptrace_reparented() is not exactly correct when the reparented thread is traced by /sbin/init, because forget_original_parent() has already changed ->real_parent. Currently, the only problem is the false notification. But with the next patch the kernel crash in this (yes, pathological) case. Signed-off-by: Oleg Nesterov <oleg@redhat.com> Cc: Roland McGrath <roland@redhat.com> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
0a967a044a
Коммит
b1442b055c
|
@ -832,7 +832,7 @@ static void reparent_thread(struct task_struct *p, struct task_struct *father)
|
|||
/* If we'd notified the old parent about this child's death,
|
||||
* also notify the new parent.
|
||||
*/
|
||||
if (!ptrace_reparented(p) &&
|
||||
if (!p->ptrace &&
|
||||
p->exit_state == EXIT_ZOMBIE && thread_group_empty(p))
|
||||
do_notify_parent(p, p->exit_signal);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче