From: Paul Mackerras This patch is from David Woodhouse . We were pretending that every syscall returned zero. Don't do that. Signed-Off-By: David Woodhouse Signed-off-by: Paul Mackerras Signed-off-by: Andrew Morton --- 25-akpm/arch/ppc64/kernel/entry.S | 2 ++ 25-akpm/arch/ppc64/kernel/ptrace.c | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff -puN arch/ppc64/kernel/entry.S~ppc64-correct-return-code-in-syscall-auditing arch/ppc64/kernel/entry.S --- 25/arch/ppc64/kernel/entry.S~ppc64-correct-return-code-in-syscall-auditing 2005-02-04 02:13:10.841447544 -0800 +++ 25-akpm/arch/ppc64/kernel/entry.S 2005-02-04 02:13:10.847446632 -0800 @@ -231,6 +231,7 @@ syscall_dotrace: syscall_exit_trace: std r3,GPR3(r1) bl .save_nvgprs + addi r3,r1,STACK_FRAME_OVERHEAD bl .do_syscall_trace_leave REST_NVGPRS(r1) ld r3,GPR3(r1) @@ -324,6 +325,7 @@ _GLOBAL(ppc64_rt_sigreturn) ld r4,TI_FLAGS(r4) andi. r4,r4,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP) beq+ 81f + addi r3,r1,STACK_FRAME_OVERHEAD bl .do_syscall_trace_leave 81: b .ret_from_except diff -puN arch/ppc64/kernel/ptrace.c~ppc64-correct-return-code-in-syscall-auditing arch/ppc64/kernel/ptrace.c --- 25/arch/ppc64/kernel/ptrace.c~ppc64-correct-return-code-in-syscall-auditing 2005-02-04 02:13:10.843447240 -0800 +++ 25-akpm/arch/ppc64/kernel/ptrace.c 2005-02-04 02:13:10.847446632 -0800 @@ -313,10 +313,10 @@ void do_syscall_trace_enter(struct pt_re do_syscall_trace(); } -void do_syscall_trace_leave(void) +void do_syscall_trace_leave(struct pt_regs *regs) { if (unlikely(current->audit_context)) - audit_syscall_exit(current, 0); /* FIXME: pass pt_regs */ + audit_syscall_exit(current, regs->result); if ((test_thread_flag(TIF_SYSCALL_TRACE) || test_thread_flag(TIF_SINGLESTEP)) _