From: Oleg Nesterov ptrace_stop() has some complicated checks to prevent the scheduling in the TASK_TRACED state with the pending SIGKILL, but these checks are racy, and they depend on arch_ptrace_stop_needed(). This patch assumes that the traced task should die asap if it was killed by SIGKILL, in that case schedule()->signal_pending_state() has no reason to ignore the TASK_WAKEKILL part of TASK_TRACED, and we can kill this nasty special case. Note: do_exit()->ptrace_notify() is special, the killed task can already dequeue SIGKILL at this point. Another indication that fatal_signal_pending() is not exactly right. Signed-off-by: Oleg Nesterov Cc: Ingo Molnar Cc: Matthew Wilcox Cc: Roland McGrath Signed-off-by: Andrew Morton --- include/linux/sched.h | 3 --- 1 file changed, 3 deletions(-) diff -puN include/linux/sched.h~ptrace-give-more-respect-to-sigkill include/linux/sched.h --- a/include/linux/sched.h~ptrace-give-more-respect-to-sigkill +++ a/include/linux/sched.h @@ -2044,9 +2044,6 @@ static inline int signal_pending_state(l if (!signal_pending(p)) return 0; - if (state & (__TASK_STOPPED | __TASK_TRACED)) - return 0; - return (state & TASK_INTERRUPTIBLE) || __fatal_signal_pending(p); } _