[4.14,107/122] ARM: 8802/1: Call syscall_trace_exit even when system call skipped

Message ID 20191122100833.086512348@linuxfoundation.org
State Superseded
Headers show
  • Untitled series #25175
Related show

Commit Message

Greg Kroah-Hartman Nov. 22, 2019, 10:29 a.m.
From: Timothy E Baldwin <T.E.Baldwin99@members.leeds.ac.uk>

[ Upstream commit f18aef742c8fbd68e280dff0a63ba0ca6ee8ad85 ]

On at least x86 and ARM64, and as documented in the ptrace man page
a skipped system call will still cause a syscall exit ptrace stop.

Previous to this commit 32-bit ARM did not, resulting in strace
being confused when seccomp skips system calls.

This change also impacts programs that use ptrace to skip system calls.

Fixes: ad75b51459ae ("ARM: 7579/1: arch/allow a scno of -1 to not cause a SIGILL")
Signed-off-by: Timothy E Baldwin <T.E.Baldwin99@members.leeds.ac.uk>

Signed-off-by: Eugene Syromyatnikov <evgsyr@gmail.com>

Reviewed-by: Kees Cook <keescook@chromium.org>

Tested-by: Kees Cook <keescook@chromium.org>

Tested-by: Eugene Syromyatnikov <evgsyr@gmail.com>

Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>

Signed-off-by: Sasha Levin <sashal@kernel.org>

 arch/arm/kernel/entry-common.S | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)



diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
index d7dc808a3d154..08a7132f56006 100644
--- a/arch/arm/kernel/entry-common.S
+++ b/arch/arm/kernel/entry-common.S
@@ -282,16 +282,15 @@  __sys_trace:
 	cmp	scno, #-1			@ skip the syscall?
 	bne	2b
 	add	sp, sp, #S_OFF			@ restore stack
-	b	ret_slow_syscall
-	str	r0, [sp, #S_R0 + S_OFF]!	@ save returned r0
+	enable_irq_notrace
 	mov	r0, sp
 	bl	syscall_trace_exit
 	b	ret_slow_syscall
-	enable_irq_notrace
+	str	r0, [sp, #S_R0 + S_OFF]!	@ save returned r0
 	mov	r0, sp
 	bl	syscall_trace_exit
 	b	ret_slow_syscall