[PATCH 02/14] alpha: report syscall errors correctly to audit

From: Magnus Lindholm

Date: Tue Nov 03 2026 - 16:53:06 EST


Use a3 to distinguish errors from successful return values and negate
error codes for audit. Failed syscalls otherwise appear successful with
a positive errno. Keep raw r0 for kernel-mode frames.

Fixes: a9302e843944 ("alpha: Enable system-call auditing support.")
Cc: stable@xxxxxxxxxxxxxxx
Signed-off-by: Magnus Lindholm <linmag7@xxxxxxxxx>
---
arch/alpha/include/asm/ptrace.h | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/arch/alpha/include/asm/ptrace.h b/arch/alpha/include/asm/ptrace.h
index 45d1229344b6f848eb930917bf50ba759da99beb..c933c8805eedd91e3845bb4b46588974258398c2 100644
--- a/arch/alpha/include/asm/ptrace.h
+++ b/arch/alpha/include/asm/ptrace.h
@@ -21,9 +21,18 @@
(current_thread_info()->syscall_meta \
|= ALPHA_SYSCALL_META_FORCE_SUCCESS)

-static inline unsigned long regs_return_value(struct pt_regs *regs)
+#define is_syscall_success is_syscall_success
+static inline int is_syscall_success(struct pt_regs *regs)
{
- return regs->r0;
+ return !regs->r19;
+}
+
+static inline long regs_return_value(struct pt_regs *regs)
+{
+ /* For user-mode registers, a3 is an error flag only at syscall exit. */
+ if (is_syscall_success(regs) || !user_mode(regs))
+ return regs->r0;
+ return -regs->r0;
}

unsigned long user_stack_pointer(struct pt_regs *regs);
--
2.43.0