vserver 1.9.5.x5
[linux-2.6.git] / arch / um / kernel / tt / exec_user.c
index 6d5fa82..26a120a 100644 (file)
 #include <errno.h>
 #include <sys/wait.h>
 #include <sys/ptrace.h>
+#include <linux/ptrace.h>
 #include <signal.h>
 #include "user_util.h"
 #include "kern_util.h"
 #include "user.h"
 #include "ptrace_user.h"
+#include "os.h"
 
 void do_exec(int old_pid, int new_pid)
 {
@@ -35,7 +37,10 @@ void do_exec(int old_pid, int new_pid)
                tracer_panic("do_exec failed to get registers - errno = %d",
                             errno);
 
-       kill(old_pid, SIGKILL);
+       os_kill_ptraced_process(old_pid, 0);
+
+       if (ptrace(PTRACE_OLDSETOPTIONS, new_pid, 0, (void *)PTRACE_O_TRACESYSGOOD) < 0)
+               tracer_panic("do_exec: PTRACE_SETOPTIONS failed, errno = %d", errno);
 
        if(ptrace_setregs(new_pid, regs) < 0)
                tracer_panic("do_exec failed to start new proc - errno = %d",