diff options
author | David Woodhouse <dwmw2@infradead.org> | 2007-01-14 09:38:18 +0800 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2007-01-24 21:13:58 +1100 |
commit | cfcd1705b61ecce1ab102b9593cf733fef314a19 (patch) | |
tree | 26ec97215dc25ae897af278a79b1f37303ff35a3 /arch/powerpc/kernel/ptrace.c | |
parent | 0e47e3cca100e7c8e8124378e4e44969c2e042fd (diff) | |
download | linux-cfcd1705b61ecce1ab102b9593cf733fef314a19.tar.gz linux-cfcd1705b61ecce1ab102b9593cf733fef314a19.tar.bz2 linux-cfcd1705b61ecce1ab102b9593cf733fef314a19.zip |
[POWERPC] Mask 32-bit system call arguments to 32 bits on PPC64 in audit code
The system call entry code will clear the high bits of argument
registers before invoking the system call; don't report whatever noise
happens to be in the high bits of the register before that happens.
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/kernel/ptrace.c')
-rw-r--r-- | arch/powerpc/kernel/ptrace.c | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c index 975102a020d9..cc44c7b975aa 100644 --- a/arch/powerpc/kernel/ptrace.c +++ b/arch/powerpc/kernel/ptrace.c @@ -532,16 +532,22 @@ void do_syscall_trace_enter(struct pt_regs *regs) && (current->ptrace & PT_PTRACED)) do_syscall_trace(); - if (unlikely(current->audit_context)) - audit_syscall_entry( -#ifdef CONFIG_PPC32 - AUDIT_ARCH_PPC, -#else - test_thread_flag(TIF_32BIT)?AUDIT_ARCH_PPC:AUDIT_ARCH_PPC64, + if (unlikely(current->audit_context)) { +#ifdef CONFIG_PPC64 + if (!test_thread_flag(TIF_32BIT)) + audit_syscall_entry(AUDIT_ARCH_PPC64, + regs->gpr[0], + regs->gpr[3], regs->gpr[4], + regs->gpr[5], regs->gpr[6]); + else #endif - regs->gpr[0], - regs->gpr[3], regs->gpr[4], - regs->gpr[5], regs->gpr[6]); + audit_syscall_entry(AUDIT_ARCH_PPC, + regs->gpr[0], + regs->gpr[3] & 0xffffffff, + regs->gpr[4] & 0xffffffff, + regs->gpr[5] & 0xffffffff, + regs->gpr[6] & 0xffffffff); + } } void do_syscall_trace_leave(struct pt_regs *regs) |