Commit 15b9f360 authored by Oleg Nesterov's avatar Oleg Nesterov Committed by Linus Torvalds

coredump: zap_threads() must skip kernel threads

The main loop in zap_threads() must skip kthreads which may use the same
mm.  Otherwise we "kill" this thread erroneously (for example, it can not
fork or exec after that), and the coredumping task stucks in the
TASK_UNINTERRUPTIBLE state forever because of the wrong ->core_waiters
count.
Signed-off-by: default avatarOleg Nesterov <oleg@tv-sign.ru>
Cc: Roland McGrath <roland@redhat.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 246bb0b1
...@@ -1574,11 +1574,12 @@ static inline int zap_threads(struct task_struct *tsk, struct mm_struct *mm, ...@@ -1574,11 +1574,12 @@ static inline int zap_threads(struct task_struct *tsk, struct mm_struct *mm,
for_each_process(g) { for_each_process(g) {
if (g == tsk->group_leader) if (g == tsk->group_leader)
continue; continue;
if (g->flags & PF_KTHREAD)
continue;
p = g; p = g;
do { do {
if (p->mm) { if (p->mm) {
if (p->mm == mm) { if (unlikely(p->mm == mm)) {
lock_task_sighand(p, &flags); lock_task_sighand(p, &flags);
zap_process(p); zap_process(p);
unlock_task_sighand(p, &flags); unlock_task_sighand(p, &flags);
......
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