ARM: 7579/1: arch/allow a scno of -1 to not cause a SIGILL
authorKees Cook <keescook@chromium.org>
Thu, 15 Nov 2012 21:12:17 +0000 (22:12 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Mon, 19 Nov 2012 14:14:18 +0000 (14:14 +0000)
On tracehook-friendly platforms, a system call number of -1 falls
through without running much code or taking much action.

ARM is different. This adds a short-circuit check in the trace path to
avoid any additional work, as suggested by Russell King, to make sure
that ARM behaves the same way as other platforms.

Signed-off-by: Kees Cook <keescook@chromium.org>
Acked-by: Will Drewry <wad@chromium.org>
Reviewed-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/kernel/entry-common.S

index b621871dd27736153fe6792876f43f1c353a2fa5..ee81dbc6fa1028c912ce927316eaa3fd4d584061 100644 (file)
@@ -448,7 +448,10 @@ __sys_trace:
        ldmccia r1, {r0 - r6}                   @ have to reload r0 - r6
        stmccia sp, {r4, r5}                    @ and update the stack args
        ldrcc   pc, [tbl, scno, lsl #2]         @ call sys_* routine
-       b       2b
+       cmp     scno, #-1                       @ skip the syscall?
+       bne     2b
+       add     sp, sp, #S_OFF                  @ restore stack
+       b       ret_slow_syscall
 
 __sys_trace_return:
        str     r0, [sp, #S_R0 + S_OFF]!        @ save returned r0