diff options
Diffstat (limited to 'arch/mips/kernel/ptrace.c')
| -rw-r--r-- | arch/mips/kernel/ptrace.c | 12 | 
1 files changed, 12 insertions, 0 deletions
diff --git a/arch/mips/kernel/ptrace.c b/arch/mips/kernel/ptrace.c index 9c6299c733a3..8ae1ebef8b71 100644 --- a/arch/mips/kernel/ptrace.c +++ b/arch/mips/kernel/ptrace.c @@ -15,6 +15,7 @@   * binaries.   */  #include <linux/compiler.h> +#include <linux/context_tracking.h>  #include <linux/kernel.h>  #include <linux/sched.h>  #include <linux/mm.h> @@ -534,6 +535,8 @@ static inline int audit_arch(void)   */  asmlinkage void syscall_trace_enter(struct pt_regs *regs)  { +	user_exit(); +  	/* do the secure computing check first */  	secure_computing_strict(regs->regs[2]); @@ -570,6 +573,13 @@ out:   */  asmlinkage void syscall_trace_leave(struct pt_regs *regs)  { +        /* +	 * We may come here right after calling schedule_user() +	 * or do_notify_resume(), in which case we can be in RCU +	 * user mode. +	 */ +	user_exit(); +  	audit_syscall_exit(regs);  	if (!(current->ptrace & PT_PTRACED)) @@ -592,4 +602,6 @@ asmlinkage void syscall_trace_leave(struct pt_regs *regs)  		send_sig(current->exit_code, current, 1);  		current->exit_code = 0;  	} + +	user_enter();  }  | 
