Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 137c3c46 authored by David Howells's avatar David Howells Committed by Al Viro
Browse files

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: default avatarAl Viro <viro@zeniv.linux.org.uk>
Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent efee984c
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -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
+0 −10
Original line number Diff line number Diff line
@@ -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);