Messages in this thread Patch in this message |  | | Date | Mon, 16 Jun 2008 18:20:17 +0400 | From | Oleg Nesterov <> | Subject | [PATCH 1/3] ptrace: give more respect to SIGKILL |
| |
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 <oleg@tv-sign.ru>
--- 26-rc2/include/linux/sched.h~1_KILL_TRACED_CHECK 2008-06-01 16:44:39.000000000 +0400 +++ 26-rc2/include/linux/sched.h 2008-06-01 16:44:39.000000000 +0400 @@ -2034,9 +2034,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); }
|  |