do_ptrace_resume(PTRACE_EVENT_VFORK) can't use ptrace_wake_up()
because it clears context->stop_code.

Not good, we should follow the "force_wakeup" logic, and it is
always good to consolidate the calls to utrace layer.

Change ptrace_wake_up() to check "action != UTRACE_REPORT" and
change do_ptrace_resume() to rely on ptrace_wake_up().

---

 kernel/ptrace.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

--- PU/kernel/ptrace.c~101_RESUME_ALWAYS_USE_WAKEUP     2009-10-18 
16:51:38.000000000 +0200
+++ PU/kernel/ptrace.c  2009-10-18 18:34:55.000000000 +0200
@@ -960,7 +960,8 @@ static void ptrace_wake_up(struct task_s
                }
        }
 
-       ptrace_context(engine)->stop_code = 0;
+       if (action != UTRACE_REPORT)
+               ptrace_context(engine)->stop_code = 0;
        utrace_control(tracee, engine, action);
 }
 
@@ -975,8 +976,7 @@ static void do_ptrace_resume(struct utra
        case PTRACE_EVENT_VFORK:
                if (context->options & PTRACE_O_TRACEVFORKDONE) {
                        set_stop_code(context, PTRACE_EVENT_VFORK_DONE);
-                       utrace_control(tracee, engine, UTRACE_REPORT);
-                       return;
+                       action = UTRACE_REPORT;
                }
                break;
 

Reply via email to