ARM: 8802/1: Call syscall_trace_exit even when system call skipped
authorTimothy E Baldwin <>
Mon, 8 Oct 2018 18:26:48 +0000 (19:26 +0100)
committerRussell King <>
Wed, 10 Oct 2018 12:53:12 +0000 (13:53 +0100)
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 <>
Signed-off-by: Eugene Syromyatnikov <>
Reviewed-by: Kees Cook <>
Tested-by: Kees Cook <>
Tested-by: Eugene Syromyatnikov <>
Signed-off-by: Russell King <>

index 746565a876dcdd362522d1e546c8404faacfbfe2..0465d65d23de5786ef5df32738d0830ca492353a 100644 (file)
@@ -296,16 +296,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