"[PATCH 76] fold detach_signal() into ptrace_detach_task()" was buggy, we read engine->date before checking IS_ERR(engine).
--- kernel/ptrace.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --- PU/kernel/ptrace.c~79_FIX_DETACH_ENGINE_DEREF 2009-10-10 17:06:11.000000000 +0200 +++ PU/kernel/ptrace.c 2009-10-10 17:09:34.000000000 +0200 @@ -90,7 +90,6 @@ static struct utrace_engine *ptrace_look static void ptrace_detach_task(struct task_struct *tracee, int sig) { struct utrace_engine *engine = ptrace_lookup_engine(tracee); - struct ptrace_context *context = ptrace_context(engine); enum utrace_resume_action action = UTRACE_DETACH; int err; @@ -98,6 +97,8 @@ static void ptrace_detach_task(struct ta return; if (sig) { + struct ptrace_context *context = ptrace_context(engine); + switch (get_stop_event(context)) { case PTRACE_EVENT_SYSCALL_ENTRY: case PTRACE_EVENT_SYSCALL_EXIT: