Re: [PATCH] m68k: syscall: fix syscall_get_arguments() argument mapping
From: Michael Schmitz
Date: Fri May 29 2026 - 18:55:07 EST
Yiqi,
thanks for your patch!
On 29/05/2026 9:40 PM, Yiqi Sun wrote:
On m68k, syscall_get_arguments() currently returns orig_d0 as args[0],
followed by d1-d5 as args[1..5].
From my reading of other arch's syscall.h code at the time the patch was written, the syscall nr passed in d0 appeared to be considered the first argument to be returned. It now appears that that was incorrect - I don't suppose the semantics of this function changed over the past three years?
m68k seccomp support was rather incomplete back then, and I've seen more contributions recently. Does this cause any regressions or improvements to the seccomp_bpf tests or other test results?
However, syscall arguments are passed in d1-d5 and a0, so args[0]
should reflect d1, and the full argument set should include a0.
Fix the mapping by copying all six arguments from the saved register
block starting at d1.
Fixes: 6baaade15594 ("m68k: Add kernel seccomp support")
Signed-off-by: Yiqi Sun <sunyiqixm@xxxxxxxxx>
---
arch/m68k/include/asm/syscall.h | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/arch/m68k/include/asm/syscall.h b/arch/m68k/include/asm/syscall.h
index bf84b160c2eb..2e268eeedad3 100644
--- a/arch/m68k/include/asm/syscall.h
+++ b/arch/m68k/include/asm/syscall.h
@@ -52,10 +52,7 @@ static inline void syscall_get_arguments(struct task_struct *task,
struct pt_regs *regs,
unsigned long *args)
{
- args[0] = regs->orig_d0;
- args++;
-
- memcpy(args, ®s->d1, 5 * sizeof(args[0]));
+ memcpy(args, ®s->d1, 6 * sizeof(args[0]));
}
static inline void syscall_set_arguments(struct task_struct *task,
Any reason for not applying the same change to syscall_set_arguments() here?
Cheers,
Michael