From 137c3c469f5a940c8c095b734373581c3a0d3955 Mon Sep 17 00:00:00 2001 From: David Howells Date: Tue, 1 May 2012 19:44:14 +0100 Subject: FRV: Prevent syscall exit tracing and notify_resume at end of kernel exceptions Move the test for kernel mode processing from do_signal() into entry.S to also prevent system call exit tracing and userspace resumption notification handling happening when returning from kernel exceptions. Reported-by: Al Viro Signed-off-by: David Howells Signed-off-by: Al Viro --- arch/frv/kernel/entry.S | 4 +++- arch/frv/kernel/signal.c | 10 ---------- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/arch/frv/kernel/entry.S b/arch/frv/kernel/entry.S index 5ba23f715ea5..ff3092c18ca2 100644 --- a/arch/frv/kernel/entry.S +++ b/arch/frv/kernel/entry.S @@ -1163,7 +1163,9 @@ __syscall_trace_entry: # perform syscall exit tracing __syscall_exit_work: LEDS 0x6340 - andicc gr4,#_TIF_SYSCALL_TRACE,gr0,icc0 + andicc gr22,#PSR_PS,gr0,icc1 ; don't handle on return to kernel mode + andicc.p gr4,#_TIF_SYSCALL_TRACE,gr0,icc0 + bne icc1,#0,__entry_return_direct beq icc0,#1,__entry_work_pending movsg psr,gr23 diff --git a/arch/frv/kernel/signal.c b/arch/frv/kernel/signal.c index 4e134c7eceea..f3b9064c548c 100644 --- a/arch/frv/kernel/signal.c +++ b/arch/frv/kernel/signal.c @@ -474,18 +474,8 @@ static void do_signal(void) { struct k_sigaction ka; siginfo_t info; - sigset_t *oldset; int signr; - /* - * We want the common case to go fast, which - * is why we may in certain cases get here from - * kernel mode. Just return without doing anything - * if so. - */ - if (!user_mode(__frame)) - return; - signr = get_signal_to_deliver(&info, &ka, __frame, NULL); if (signr > 0) { handle_signal(signr, &info, &ka); -- cgit v1.2.3-59-g8ed1b