vserver 1.9.5.x5
[linux-2.6.git] / arch / mips / kernel / ptrace.c
index 7661128..0c41555 100644 (file)
@@ -121,7 +121,7 @@ asmlinkage int sys_ptrace(long request, long pid, long addr, long data)
                        tmp = regs->regs[addr];
                        break;
                case FPR_BASE ... FPR_BASE + 31:
-                       if (child->used_math) {
+                       if (tsk_used_math(child)) {
                                fpureg_t *fregs = get_fpu_regs(child);
 
 #ifdef CONFIG_MIPS32
@@ -207,7 +207,7 @@ asmlinkage int sys_ptrace(long request, long pid, long addr, long data)
                case FPR_BASE ... FPR_BASE + 31: {
                        fpureg_t *fregs = get_fpu_regs(child);
 
-                       if (!child->used_math) {
+                       if (!tsk_used_math(child)) {
                                /* FP not yet used  */
                                memset(&child->thread.fpu.hard, ~0,
                                       sizeof(child->thread.fpu.hard));
@@ -279,7 +279,7 @@ asmlinkage int sys_ptrace(long request, long pid, long addr, long data)
         */
        case PTRACE_KILL:
                ret = 0;
-               if (child->state == TASK_ZOMBIE)        /* already dead */
+               if (child->exit_state == EXIT_ZOMBIE)   /* already dead */
                        break;
                child->exit_code = SIGKILL;
                wake_up_process(child);
@@ -305,8 +305,17 @@ out:
  * Notification of system call entry/exit
  * - triggered by current->work.syscall_trace
  */
-asmlinkage void do_syscall_trace(void)
+asmlinkage void do_syscall_trace(struct pt_regs *regs, int entryexit)
 {
+       if (unlikely(current->audit_context)) {
+               if (!entryexit)
+                       audit_syscall_entry(current, regs->orig_eax,
+                                           regs->regs[4], regs->regs[5],
+                                           regs->regs[6], regs->regs[7]);
+               else
+                       audit_syscall_exit(current, regs->regs[2]);
+       }
+
        if (!test_thread_flag(TIF_SYSCALL_TRACE))
                return;
        if (!(current->ptrace & PT_PTRACED))