ARM: 7475/1: sys_trace: allow all syscall arguments to be updated via ptrace
authorWill Deacon <will.deacon@arm.com>
Thu, 19 Jul 2012 16:49:22 +0000 (17:49 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Sat, 28 Jul 2012 10:11:53 +0000 (11:11 +0100)
Prior to syscall invocation, __sys_trace only reloads r0-r3 from the
kernel stack, preventing the debugger from updating arguments 5-7 when
signalled via ptrace.

This patch updates the code to reload r0-r6, updating arguments 5 and 6
on the stack (argument 7 is only used by OABI indirect syscalls and
can remain in a register).

Reported-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-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 2909bbcaa0d11998373d24f5d1393d73c0931258..978eac57e04a783f8901a16986f6d88f96f125ba 100644 (file)
@@ -443,7 +443,8 @@ __sys_trace:
        mov     scno, r0                        @ syscall number (possibly new)
        add     r1, sp, #S_R0 + S_OFF           @ pointer to regs
        cmp     scno, #NR_syscalls              @ check upper syscall limit
-       ldmccia r1, {r0 - r3}                   @ have to reload r0 - r3
+       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