diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/kernel/ptrace.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c index b00b33a18390..eff5b8c68652 100644 --- a/arch/x86/kernel/ptrace.c +++ b/arch/x86/kernel/ptrace.c | |||
@@ -1511,6 +1511,13 @@ void syscall_trace_leave(struct pt_regs *regs) | |||
1511 | { | 1511 | { |
1512 | bool step; | 1512 | bool step; |
1513 | 1513 | ||
1514 | /* | ||
1515 | * We may come here right after calling schedule_user() | ||
1516 | * or do_notify_resume(), in which case we can be in RCU | ||
1517 | * user mode. | ||
1518 | */ | ||
1519 | rcu_user_exit(); | ||
1520 | |||
1514 | audit_syscall_exit(regs); | 1521 | audit_syscall_exit(regs); |
1515 | 1522 | ||
1516 | if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT))) | 1523 | if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT))) |