ptrace_report_syscall_exit() can be entered when the tracee is
killed, in that case resume_stopped/stopped_code can be set.

---

 kernel/ptrace.c |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

--- PU/kernel/ptrace.c~32_REPORT_SYSCALL_EXIT_CK_KILLED 2009-09-13 
21:22:24.000000000 +0200
+++ PU/kernel/ptrace.c  2009-09-13 21:46:39.000000000 +0200
@@ -367,8 +367,11 @@ static u32 ptrace_report_syscall_exit(en
 {
        struct ptrace_context *context = ptrace_context(engine);
 
-       WARN_ON(context->resume_stopped);
-       WARN_ON(context->stopped_code);
+       // XXX: temporary debugging check...
+       if (!fatal_signal_pending(task)) {
+               WARN_ON(context->resume_stopped);
+               WARN_ON(context->stopped_code);
+       }
 
        context->resume_stopped = ptrace_resume_syscall;
        context->stopped_code = (context->options & PTRACE_O_TRACESYSGOOD) ?

Reply via email to