vserver 1.9.3
[linux-2.6.git] / arch / arm / kernel / ptrace.c
index 4dcf99a..465861f 100644 (file)
@@ -485,7 +485,7 @@ void ptrace_break(struct task_struct *tsk, struct pt_regs *regs)
        info.si_signo = SIGTRAP;
        info.si_errno = 0;
        info.si_code  = TRAP_BRKPT;
-       info.si_addr  = (void *)instruction_pointer(regs);
+       info.si_addr  = (void __user *)instruction_pointer(regs);
 
        force_sig_info(SIGTRAP, &info, tsk);
 }
@@ -622,7 +622,7 @@ static int do_ptrace(int request, struct task_struct *child, long addr, long dat
                        ret = access_process_vm(child, addr, &tmp,
                                                sizeof(unsigned long), 0);
                        if (ret == sizeof(unsigned long))
-                               ret = put_user(tmp, (unsigned long *) data);
+                               ret = put_user(tmp, (unsigned long __user *) data);
                        else
                                ret = -EIO;
                        break;
@@ -794,11 +794,8 @@ asmlinkage void syscall_trace(int why, struct pt_regs *regs)
 
        /* the 0x80 provides a way for the tracing parent to distinguish
           between a syscall stop and SIGTRAP delivery */
-       current->exit_code = SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
-                                       ? 0x80 : 0);
-       current->state = TASK_STOPPED;
-       notify_parent(current, SIGCHLD);
-       schedule();
+       ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
+                                ? 0x80 : 0));
        /*
         * this isn't the same as continuing with a signal, but it will do
         * for normal use.  strace only continues with a signal if the