do_ptrace_notify_stop() clears ->ev_code for debugging purposes,
remove this. We need the valid ->ev_code in ptrace_getsiginfo().

---

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

--- PU/kernel/ptrace.c~65_DONT_CLEAR_EV_CODE    2009-10-06 00:47:13.000000000 
+0200
+++ PU/kernel/ptrace.c  2009-10-06 00:50:01.000000000 +0200
@@ -308,7 +308,6 @@ static u32 ptrace_report_signal(u32 acti
        enum utrace_resume_action resume = context->resume;
 
        if (ev_pending(context)) {
-               WARN_ON(!context->ev_code && !fatal_signal_pending(task));
                action = utrace_signal_action(action);
                WARN_ON(action != UTRACE_SIGNAL_REPORT);
                return action | UTRACE_STOP;
@@ -361,10 +360,8 @@ static u32 ptrace_report_quiesce(u32 act
 {
        struct ptrace_context *context = ptrace_context(engine);
 
-       if (ev_pending(context)) {
-               WARN_ON(!context->ev_code && !fatal_signal_pending(task) && 
!(task->flags & PF_EXITING));
+       if (ev_pending(context))
                return UTRACE_STOP;
-       }
 
        return event ? UTRACE_RESUME : context->resume;
 }
@@ -813,7 +810,7 @@ static int ptrace_getsiginfo(struct ptra
 
        memset(info, 0, sizeof(*info));
        info->si_signo = SIGTRAP;
-       info->si_code = context->ev_code; // XXX: ev_code was already cleared!!!
+       info->si_code = context->ev_code;
        info->si_pid = task_pid_vnr(tracee);
        info->si_uid = task_uid(tracee);
 
@@ -858,10 +855,6 @@ static void do_ptrace_notify_stop(struct
 {
        tracee->exit_code = context->ev_code;
 
-       // XXX: for debug only
-       WARN_ON(!context->ev_code);
-       context->ev_code = 0;
-
        read_lock(&tasklist_lock);
        /*
         * Don't want to allow preemption here, because

Reply via email to