* [PATCH v2 01/13] audit: log all six syscall arguments in the SYSCALL record
2026-09-02 14:43 [PATCH v2 00/13] audit: log all six syscall arguments in the SYSCALL record Ricardo Robaina
@ 2026-09-02 14:43 ` Ricardo Robaina
2026-09-03 8:21 ` Will Deacon
2026-09-02 14:43 ` [PATCH v2 02/13] alpha: pass pt_regs to audit_syscall_entry() Ricardo Robaina
` (11 subsequent siblings)
12 siblings, 1 reply; 16+ messages in thread
From: Ricardo Robaina @ 2026-09-02 14:43 UTC (permalink / raw)
To: audit, linux-kernel, linux-alpha, linux-arm-kernel, linux-csky,
linux-mips, linux-openrisc, linux-parisc, linux-sh, sparclinux,
linux-um, bpf
Cc: paul, eparis, sgrubb, oleg, richard.henderson, mattst88, linmag7,
linux, catalin.marinas, will, guoren, monstr, tsbogend, jonas,
stefan.kristiansson, shorne, James.Bottomley, deller, ysato,
dalias, glaubitz, davem, andreas, richard, anton.ivanov, johannes,
chris, jcmvbkbc, tglx, peterz, luto, Ricardo Robaina
The SYSCALL record currently logs only four of the six syscall
arguments (a0-a3). The remaining two are captured but silently
discarded before reaching the audit context. This leads to the
need for auxiliary records when audit-relevant data lands in the
5th or 6th argument of a syscall.
Extend the SYSCALL record to log all six arguments, by adding
arguments a4 and a5 (5th and 6th syscall arguments respectively)
inline within the existing record. Also add the two new args to
the audit rules switch case, so audit rules can filter on them.
Rather than plumbing two more register arguments through every
architecture's syscall entry path, change __audit_syscall_entry()
to take a pointer to pt_regs and use syscall_get_arguments() to
retrieve all six arguments.
audit-testsuite# make test
audit-testsuite# ausearch -i -m SYSCALL
...
type=SYSCALL ... syscall=sendto success=yes exit=1088 a0=0x4
a1=0x7ffe43518b60 a2=0x440 a3=0x0 a4=7ffe43518b4c a5=c
type=SYSCALL ... syscall=openat2 success=yes exit=4 a0=0x3
a1=0x7fffc74692c8 a2=0x7fffc7467390 a3=0x18 a4=0 a5=7fffc74674f8
type=SYSCALL ... syscall=openat success=yes exit=3 a0=AT_FDCWD
a1=0x557ced4141a2 a2=O_RDWR|O_NONBLOCK a3=0x0 a4=0 a5=0
...
Suggested-by: Will Deacon <will@kernel.org>
Link: https://lore.kernel.org/audit/CAHC9VhSjEt_-Bsra4AEqWv+Daw5Ff=gqy7dX4Ah11RVhdyCBUQ@mail.gmail.com/T/#t
Signed-off-by: Ricardo Robaina <rrobaina@redhat.com>
---
include/linux/audit.h | 13 ++++---------
include/uapi/linux/audit.h | 2 ++
kernel/audit.h | 2 +-
kernel/auditfilter.c | 2 ++
kernel/auditsc.c | 19 ++++++++-----------
kernel/entry/syscall-common.c | 4 +---
6 files changed, 18 insertions(+), 24 deletions(-)
diff --git a/include/linux/audit.h b/include/linux/audit.h
index 45abb3722d30..9ce5962bc537 100644
--- a/include/linux/audit.h
+++ b/include/linux/audit.h
@@ -323,8 +323,7 @@ extern int audit_alloc(struct task_struct *task);
extern void __audit_free(struct task_struct *task);
extern void __audit_uring_entry(u8 op);
extern void __audit_uring_exit(int success, long code);
-extern void __audit_syscall_entry(int major, unsigned long a0, unsigned long a1,
- unsigned long a2, unsigned long a3);
+extern void __audit_syscall_entry(int major, struct pt_regs *regs);
extern void __audit_syscall_exit(int ret_success, long ret_value);
extern void __audit_getname(struct filename *name);
extern void __audit_inode(struct filename *name, const struct dentry *dentry,
@@ -373,12 +372,10 @@ static inline void audit_uring_exit(int success, long code)
if (unlikely(audit_context()))
__audit_uring_exit(success, code);
}
-static inline void audit_syscall_entry(int major, unsigned long a0,
- unsigned long a1, unsigned long a2,
- unsigned long a3)
+static inline void audit_syscall_entry(int major, struct pt_regs *regs)
{
if (unlikely(audit_context()))
- __audit_syscall_entry(major, a0, a1, a2, a3);
+ __audit_syscall_entry(major, regs);
}
static inline void audit_syscall_exit(void *pt_regs)
{
@@ -611,9 +608,7 @@ static inline void audit_uring_entry(u8 op)
{ }
static inline void audit_uring_exit(int success, long code)
{ }
-static inline void audit_syscall_entry(int major, unsigned long a0,
- unsigned long a1, unsigned long a2,
- unsigned long a3)
+static inline void audit_syscall_entry(int major, struct pt_regs *regs)
{ }
static inline void audit_syscall_exit(void *pt_regs)
{ }
diff --git a/include/uapi/linux/audit.h b/include/uapi/linux/audit.h
index e8f5ce677df7..6726059d6df1 100644
--- a/include/uapi/linux/audit.h
+++ b/include/uapi/linux/audit.h
@@ -303,6 +303,8 @@
#define AUDIT_ARG1 (AUDIT_ARG0+1)
#define AUDIT_ARG2 (AUDIT_ARG0+2)
#define AUDIT_ARG3 (AUDIT_ARG0+3)
+#define AUDIT_ARG4 (AUDIT_ARG0+4)
+#define AUDIT_ARG5 (AUDIT_ARG0+5)
#define AUDIT_FILTERKEY 210
diff --git a/kernel/audit.h b/kernel/audit.h
index 92d5e723d570..83011b14af18 100644
--- a/kernel/audit.h
+++ b/kernel/audit.h
@@ -117,7 +117,7 @@ struct audit_context {
struct audit_stamp stamp; /* event identifier */
int major; /* syscall number */
int uring_op; /* uring operation */
- unsigned long argv[4]; /* syscall arguments */
+ unsigned long argv[6]; /* syscall arguments */
long return_code;/* syscall return code */
u64 prio;
int return_valid; /* return code is valid */
diff --git a/kernel/auditfilter.c b/kernel/auditfilter.c
index f52645625214..cded3696e3c5 100644
--- a/kernel/auditfilter.c
+++ b/kernel/auditfilter.c
@@ -358,6 +358,8 @@ static int audit_field_valid(struct audit_entry *entry, struct audit_field *f)
case AUDIT_ARG1:
case AUDIT_ARG2:
case AUDIT_ARG3:
+ case AUDIT_ARG4:
+ case AUDIT_ARG5:
case AUDIT_PERS: /* <uapi/linux/personality.h> */
case AUDIT_DEVMINOR:
/* all ops are valid */
diff --git a/kernel/auditsc.c b/kernel/auditsc.c
index 2b9ce0b52511..cf45c782b03d 100644
--- a/kernel/auditsc.c
+++ b/kernel/auditsc.c
@@ -728,6 +728,8 @@ static int audit_filter_rules(struct task_struct *tsk,
case AUDIT_ARG1:
case AUDIT_ARG2:
case AUDIT_ARG3:
+ case AUDIT_ARG4:
+ case AUDIT_ARG5:
if (ctx)
result = audit_comparator(ctx->argv[f->type-AUDIT_ARG0], f->op, f->val);
break;
@@ -1674,11 +1676,13 @@ static void audit_log_exit(void)
AUDITSC_SUCCESS),
context->return_code);
audit_log_format(ab,
- " a0=%lx a1=%lx a2=%lx a3=%lx items=%d",
+ " a0=%lx a1=%lx a2=%lx a3=%lx a4=%lx a5=%lx items=%d",
context->argv[0],
context->argv[1],
context->argv[2],
context->argv[3],
+ context->argv[4],
+ context->argv[5],
context->name_count);
audit_log_task_info(ab);
audit_log_key(ab, context->filterkey);
@@ -1970,10 +1974,7 @@ void __audit_uring_exit(int success, long code)
/**
* __audit_syscall_entry - fill in an audit record at syscall entry
* @major: major syscall type (function)
- * @a1: additional syscall register 1
- * @a2: additional syscall register 2
- * @a3: additional syscall register 3
- * @a4: additional syscall register 4
+ * @regs: the task's register state at syscall entry
*
* Fill in audit context at syscall entry. This only happens if the
* audit context was created when the task was created and the state or
@@ -1983,8 +1984,7 @@ void __audit_uring_exit(int success, long code)
* will only be written if another part of the kernel requests that it
* be written).
*/
-void __audit_syscall_entry(int major, unsigned long a1, unsigned long a2,
- unsigned long a3, unsigned long a4)
+void __audit_syscall_entry(int major, struct pt_regs *regs)
{
struct audit_context *context = audit_context();
enum audit_state state;
@@ -2012,10 +2012,7 @@ void __audit_syscall_entry(int major, unsigned long a1, unsigned long a2,
context->arch = syscall_get_arch(current);
context->major = major;
- context->argv[0] = a1;
- context->argv[1] = a2;
- context->argv[2] = a3;
- context->argv[3] = a4;
+ syscall_get_arguments(current, regs, context->argv);
context->context = AUDIT_CTX_SYSCALL;
context->current_state = state;
ktime_get_coarse_real_ts64(&context->stamp.ctime);
diff --git a/kernel/entry/syscall-common.c b/kernel/entry/syscall-common.c
index b8eac9efb6fd..471db2a8e09d 100644
--- a/kernel/entry/syscall-common.c
+++ b/kernel/entry/syscall-common.c
@@ -22,9 +22,7 @@ void trace_syscall_exit(struct pt_regs *regs, long ret)
void syscall_enter_audit(struct pt_regs *regs)
{
long syscall = syscall_get_nr(current, regs);
- unsigned long args[6];
- syscall_get_arguments(current, regs, args);
- __audit_syscall_entry(syscall, args[0], args[1], args[2], args[3]);
+ __audit_syscall_entry(syscall, regs);
}
#endif
--
2.55.0
^ permalink raw reply related [flat|nested] 16+ messages in thread* Re: [PATCH v2 01/13] audit: log all six syscall arguments in the SYSCALL record
2026-09-02 14:43 ` [PATCH v2 01/13] " Ricardo Robaina
@ 2026-09-03 8:21 ` Will Deacon
0 siblings, 0 replies; 16+ messages in thread
From: Will Deacon @ 2026-09-03 8:21 UTC (permalink / raw)
To: Ricardo Robaina
Cc: audit, linux-kernel, linux-alpha, linux-arm-kernel, linux-csky,
linux-mips, linux-openrisc, linux-parisc, linux-sh, sparclinux,
linux-um, bpf, paul, eparis, sgrubb, oleg, richard.henderson,
mattst88, linmag7, linux, catalin.marinas, guoren, monstr,
tsbogend, jonas, stefan.kristiansson, shorne, James.Bottomley,
deller, ysato, dalias, glaubitz, davem, andreas, richard,
anton.ivanov, johannes, chris, jcmvbkbc, tglx, peterz, luto
On Wed, Sep 02, 2026 at 11:43:34AM -0300, Ricardo Robaina wrote:
> The SYSCALL record currently logs only four of the six syscall
> arguments (a0-a3). The remaining two are captured but silently
> discarded before reaching the audit context. This leads to the
> need for auxiliary records when audit-relevant data lands in the
> 5th or 6th argument of a syscall.
>
> Extend the SYSCALL record to log all six arguments, by adding
> arguments a4 and a5 (5th and 6th syscall arguments respectively)
> inline within the existing record. Also add the two new args to
> the audit rules switch case, so audit rules can filter on them.
>
> Rather than plumbing two more register arguments through every
> architecture's syscall entry path, change __audit_syscall_entry()
> to take a pointer to pt_regs and use syscall_get_arguments() to
> retrieve all six arguments.
>
> audit-testsuite# make test
> audit-testsuite# ausearch -i -m SYSCALL
> ...
> type=SYSCALL ... syscall=sendto success=yes exit=1088 a0=0x4
> a1=0x7ffe43518b60 a2=0x440 a3=0x0 a4=7ffe43518b4c a5=c
> type=SYSCALL ... syscall=openat2 success=yes exit=4 a0=0x3
> a1=0x7fffc74692c8 a2=0x7fffc7467390 a3=0x18 a4=0 a5=7fffc74674f8
> type=SYSCALL ... syscall=openat success=yes exit=3 a0=AT_FDCWD
> a1=0x557ced4141a2 a2=O_RDWR|O_NONBLOCK a3=0x0 a4=0 a5=0
> ...
>
> Suggested-by: Will Deacon <will@kernel.org>
> Link: https://lore.kernel.org/audit/CAHC9VhSjEt_-Bsra4AEqWv+Daw5Ff=gqy7dX4Ah11RVhdyCBUQ@mail.gmail.com/T/#t
> Signed-off-by: Ricardo Robaina <rrobaina@redhat.com>
> ---
> include/linux/audit.h | 13 ++++---------
> include/uapi/linux/audit.h | 2 ++
> kernel/audit.h | 2 +-
> kernel/auditfilter.c | 2 ++
> kernel/auditsc.c | 19 ++++++++-----------
> kernel/entry/syscall-common.c | 4 +---
> 6 files changed, 18 insertions(+), 24 deletions(-)
>
> diff --git a/include/linux/audit.h b/include/linux/audit.h
> index 45abb3722d30..9ce5962bc537 100644
> --- a/include/linux/audit.h
> +++ b/include/linux/audit.h
> @@ -323,8 +323,7 @@ extern int audit_alloc(struct task_struct *task);
> extern void __audit_free(struct task_struct *task);
> extern void __audit_uring_entry(u8 op);
> extern void __audit_uring_exit(int success, long code);
> -extern void __audit_syscall_entry(int major, unsigned long a0, unsigned long a1,
> - unsigned long a2, unsigned long a3);
> +extern void __audit_syscall_entry(int major, struct pt_regs *regs);
> extern void __audit_syscall_exit(int ret_success, long ret_value);
> extern void __audit_getname(struct filename *name);
> extern void __audit_inode(struct filename *name, const struct dentry *dentry,
> @@ -373,12 +372,10 @@ static inline void audit_uring_exit(int success, long code)
> if (unlikely(audit_context()))
> __audit_uring_exit(success, code);
> }
> -static inline void audit_syscall_entry(int major, unsigned long a0,
> - unsigned long a1, unsigned long a2,
> - unsigned long a3)
> +static inline void audit_syscall_entry(int major, struct pt_regs *regs)
> {
> if (unlikely(audit_context()))
> - __audit_syscall_entry(major, a0, a1, a2, a3);
> + __audit_syscall_entry(major, regs);
> }
Won't this (temporarily) break the build? Maybe you need to introduce a
new helper e.g. audit_syscall_entry_regs(), then convert everybody over
to that, then rename it to audit_syscall_entry() at the end to keep the
series bisectable.
Will
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v2 02/13] alpha: pass pt_regs to audit_syscall_entry()
2026-09-02 14:43 [PATCH v2 00/13] audit: log all six syscall arguments in the SYSCALL record Ricardo Robaina
2026-09-02 14:43 ` [PATCH v2 01/13] " Ricardo Robaina
@ 2026-09-02 14:43 ` Ricardo Robaina
2026-09-02 14:43 ` [PATCH v2 03/13] arm: " Ricardo Robaina
` (10 subsequent siblings)
12 siblings, 0 replies; 16+ messages in thread
From: Ricardo Robaina @ 2026-09-02 14:43 UTC (permalink / raw)
To: audit, linux-kernel, linux-alpha, linux-arm-kernel, linux-csky,
linux-mips, linux-openrisc, linux-parisc, linux-sh, sparclinux,
linux-um, bpf
Cc: paul, eparis, sgrubb, oleg, richard.henderson, mattst88, linmag7,
linux, catalin.marinas, will, guoren, monstr, tsbogend, jonas,
stefan.kristiansson, shorne, James.Bottomley, deller, ysato,
dalias, glaubitz, davem, andreas, richard, anton.ivanov, johannes,
chris, jcmvbkbc, tglx, peterz, luto, Ricardo Robaina
audit_syscall_entry() now takes a pointer to pt_regs and extracts
the syscall arguments itself via syscall_get_arguments(). Drop the
individual argument registers from the call and pass regs instead.
Signed-off-by: Ricardo Robaina <rrobaina@redhat.com>
---
arch/alpha/kernel/ptrace.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/arch/alpha/kernel/ptrace.c b/arch/alpha/kernel/ptrace.c
index fc8f6cedbb28..8a39c0473297 100644
--- a/arch/alpha/kernel/ptrace.c
+++ b/arch/alpha/kernel/ptrace.c
@@ -496,8 +496,7 @@ asmlinkage unsigned long syscall_trace_enter(void)
}
#ifdef CONFIG_AUDITSYSCALL
- audit_syscall_entry(syscall_get_nr(current, regs),
- regs->r16, regs->r17, regs->r18, regs->r19);
+ audit_syscall_entry(syscall_get_nr(current, regs), regs);
#endif
return syscall_get_nr(current, regs);
}
--
2.55.0
^ permalink raw reply related [flat|nested] 16+ messages in thread* [PATCH v2 03/13] arm: pass pt_regs to audit_syscall_entry()
2026-09-02 14:43 [PATCH v2 00/13] audit: log all six syscall arguments in the SYSCALL record Ricardo Robaina
2026-09-02 14:43 ` [PATCH v2 01/13] " Ricardo Robaina
2026-09-02 14:43 ` [PATCH v2 02/13] alpha: pass pt_regs to audit_syscall_entry() Ricardo Robaina
@ 2026-09-02 14:43 ` Ricardo Robaina
2026-09-02 14:43 ` [PATCH v2 04/13] arm64: " Ricardo Robaina
` (9 subsequent siblings)
12 siblings, 0 replies; 16+ messages in thread
From: Ricardo Robaina @ 2026-09-02 14:43 UTC (permalink / raw)
To: audit, linux-kernel, linux-alpha, linux-arm-kernel, linux-csky,
linux-mips, linux-openrisc, linux-parisc, linux-sh, sparclinux,
linux-um, bpf
Cc: paul, eparis, sgrubb, oleg, richard.henderson, mattst88, linmag7,
linux, catalin.marinas, will, guoren, monstr, tsbogend, jonas,
stefan.kristiansson, shorne, James.Bottomley, deller, ysato,
dalias, glaubitz, davem, andreas, richard, anton.ivanov, johannes,
chris, jcmvbkbc, tglx, peterz, luto, Ricardo Robaina
audit_syscall_entry() now takes a pointer to pt_regs and extracts
the syscall arguments itself via syscall_get_arguments(). Drop the
individual argument registers from the call and pass regs instead.
Signed-off-by: Ricardo Robaina <rrobaina@redhat.com>
---
arch/arm/kernel/ptrace.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c
index ed7a2a87a670..e103ec2661cd 100644
--- a/arch/arm/kernel/ptrace.c
+++ b/arch/arm/kernel/ptrace.c
@@ -868,8 +868,7 @@ asmlinkage int syscall_trace_enter(struct pt_regs *regs)
if (test_thread_flag(TIF_SYSCALL_TRACEPOINT))
trace_sys_enter(regs, scno);
- audit_syscall_entry(scno, regs->ARM_r0, regs->ARM_r1, regs->ARM_r2,
- regs->ARM_r3);
+ audit_syscall_entry(scno, regs);
return scno;
}
--
2.55.0
^ permalink raw reply related [flat|nested] 16+ messages in thread* [PATCH v2 04/13] arm64: pass pt_regs to audit_syscall_entry()
2026-09-02 14:43 [PATCH v2 00/13] audit: log all six syscall arguments in the SYSCALL record Ricardo Robaina
` (2 preceding siblings ...)
2026-09-02 14:43 ` [PATCH v2 03/13] arm: " Ricardo Robaina
@ 2026-09-02 14:43 ` Ricardo Robaina
2026-09-03 8:22 ` Will Deacon
2026-09-02 14:43 ` [PATCH v2 05/13] csky: " Ricardo Robaina
` (8 subsequent siblings)
12 siblings, 1 reply; 16+ messages in thread
From: Ricardo Robaina @ 2026-09-02 14:43 UTC (permalink / raw)
To: audit, linux-kernel, linux-alpha, linux-arm-kernel, linux-csky,
linux-mips, linux-openrisc, linux-parisc, linux-sh, sparclinux,
linux-um, bpf
Cc: paul, eparis, sgrubb, oleg, richard.henderson, mattst88, linmag7,
linux, catalin.marinas, will, guoren, monstr, tsbogend, jonas,
stefan.kristiansson, shorne, James.Bottomley, deller, ysato,
dalias, glaubitz, davem, andreas, richard, anton.ivanov, johannes,
chris, jcmvbkbc, tglx, peterz, luto, Ricardo Robaina
audit_syscall_entry() now takes a pointer to pt_regs and extracts
the syscall arguments itself via syscall_get_arguments(). Drop the
individual argument registers from the call and pass regs instead.
Signed-off-by: Ricardo Robaina <rrobaina@redhat.com>
---
arch/arm64/kernel/ptrace.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/arch/arm64/kernel/ptrace.c b/arch/arm64/kernel/ptrace.c
index f743cbec1c3a..65532b2a8cd4 100644
--- a/arch/arm64/kernel/ptrace.c
+++ b/arch/arm64/kernel/ptrace.c
@@ -2476,8 +2476,7 @@ int syscall_trace_enter(struct pt_regs *regs)
if (test_thread_flag(TIF_SYSCALL_TRACEPOINT))
trace_sys_enter(regs, regs->syscallno);
- audit_syscall_entry(regs->syscallno, regs->orig_x0, regs->regs[1],
- regs->regs[2], regs->regs[3]);
+ audit_syscall_entry(regs->syscallno, regs);
return regs->syscallno;
}
--
2.55.0
^ permalink raw reply related [flat|nested] 16+ messages in thread* Re: [PATCH v2 04/13] arm64: pass pt_regs to audit_syscall_entry()
2026-09-02 14:43 ` [PATCH v2 04/13] arm64: " Ricardo Robaina
@ 2026-09-03 8:22 ` Will Deacon
0 siblings, 0 replies; 16+ messages in thread
From: Will Deacon @ 2026-09-03 8:22 UTC (permalink / raw)
To: Ricardo Robaina
Cc: audit, linux-kernel, linux-alpha, linux-arm-kernel, linux-csky,
linux-mips, linux-openrisc, linux-parisc, linux-sh, sparclinux,
linux-um, bpf, paul, eparis, sgrubb, oleg, richard.henderson,
mattst88, linmag7, linux, catalin.marinas, guoren, monstr,
tsbogend, jonas, stefan.kristiansson, shorne, James.Bottomley,
deller, ysato, dalias, glaubitz, davem, andreas, richard,
anton.ivanov, johannes, chris, jcmvbkbc, tglx, peterz, luto
On Wed, Sep 02, 2026 at 11:43:37AM -0300, Ricardo Robaina wrote:
> audit_syscall_entry() now takes a pointer to pt_regs and extracts
> the syscall arguments itself via syscall_get_arguments(). Drop the
> individual argument registers from the call and pass regs instead.
>
> Signed-off-by: Ricardo Robaina <rrobaina@redhat.com>
> ---
> arch/arm64/kernel/ptrace.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/arch/arm64/kernel/ptrace.c b/arch/arm64/kernel/ptrace.c
> index f743cbec1c3a..65532b2a8cd4 100644
> --- a/arch/arm64/kernel/ptrace.c
> +++ b/arch/arm64/kernel/ptrace.c
> @@ -2476,8 +2476,7 @@ int syscall_trace_enter(struct pt_regs *regs)
> if (test_thread_flag(TIF_SYSCALL_TRACEPOINT))
> trace_sys_enter(regs, regs->syscallno);
>
> - audit_syscall_entry(regs->syscallno, regs->orig_x0, regs->regs[1],
> - regs->regs[2], regs->regs[3]);
> + audit_syscall_entry(regs->syscallno, regs);
Acked-by: Will Deacon <will@kernel.org>
Thanks for doing this.
Will
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v2 05/13] csky: pass pt_regs to audit_syscall_entry()
2026-09-02 14:43 [PATCH v2 00/13] audit: log all six syscall arguments in the SYSCALL record Ricardo Robaina
` (3 preceding siblings ...)
2026-09-02 14:43 ` [PATCH v2 04/13] arm64: " Ricardo Robaina
@ 2026-09-02 14:43 ` Ricardo Robaina
2026-09-02 14:43 ` [PATCH v2 06/13] microblaze: " Ricardo Robaina
` (7 subsequent siblings)
12 siblings, 0 replies; 16+ messages in thread
From: Ricardo Robaina @ 2026-09-02 14:43 UTC (permalink / raw)
To: audit, linux-kernel, linux-alpha, linux-arm-kernel, linux-csky,
linux-mips, linux-openrisc, linux-parisc, linux-sh, sparclinux,
linux-um, bpf
Cc: paul, eparis, sgrubb, oleg, richard.henderson, mattst88, linmag7,
linux, catalin.marinas, will, guoren, monstr, tsbogend, jonas,
stefan.kristiansson, shorne, James.Bottomley, deller, ysato,
dalias, glaubitz, davem, andreas, richard, anton.ivanov, johannes,
chris, jcmvbkbc, tglx, peterz, luto, Ricardo Robaina
audit_syscall_entry() now takes a pointer to pt_regs and extracts
the syscall arguments itself via syscall_get_arguments(). Drop the
individual argument registers from the call and pass regs instead.
Signed-off-by: Ricardo Robaina <rrobaina@redhat.com>
---
arch/csky/kernel/ptrace.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/csky/kernel/ptrace.c b/arch/csky/kernel/ptrace.c
index ee2867a1576e..5c3051bcd78c 100644
--- a/arch/csky/kernel/ptrace.c
+++ b/arch/csky/kernel/ptrace.c
@@ -329,7 +329,7 @@ asmlinkage int syscall_trace_enter(struct pt_regs *regs)
if (test_thread_flag(TIF_SYSCALL_TRACEPOINT))
trace_sys_enter(regs, syscall_get_nr(current, regs));
- audit_syscall_entry(regs_syscallid(regs), regs->a0, regs->a1, regs->a2, regs->a3);
+ audit_syscall_entry(regs_syscallid(regs), regs);
return 0;
}
--
2.55.0
^ permalink raw reply related [flat|nested] 16+ messages in thread* [PATCH v2 06/13] microblaze: pass pt_regs to audit_syscall_entry()
2026-09-02 14:43 [PATCH v2 00/13] audit: log all six syscall arguments in the SYSCALL record Ricardo Robaina
` (4 preceding siblings ...)
2026-09-02 14:43 ` [PATCH v2 05/13] csky: " Ricardo Robaina
@ 2026-09-02 14:43 ` Ricardo Robaina
2026-09-02 14:43 ` [PATCH v2 07/13] mips: " Ricardo Robaina
` (6 subsequent siblings)
12 siblings, 0 replies; 16+ messages in thread
From: Ricardo Robaina @ 2026-09-02 14:43 UTC (permalink / raw)
To: audit, linux-kernel, linux-alpha, linux-arm-kernel, linux-csky,
linux-mips, linux-openrisc, linux-parisc, linux-sh, sparclinux,
linux-um, bpf
Cc: paul, eparis, sgrubb, oleg, richard.henderson, mattst88, linmag7,
linux, catalin.marinas, will, guoren, monstr, tsbogend, jonas,
stefan.kristiansson, shorne, James.Bottomley, deller, ysato,
dalias, glaubitz, davem, andreas, richard, anton.ivanov, johannes,
chris, jcmvbkbc, tglx, peterz, luto, Ricardo Robaina
audit_syscall_entry() now takes a pointer to pt_regs and extracts
the syscall arguments itself via syscall_get_arguments(). Drop the
individual argument registers from the call and pass regs instead.
Signed-off-by: Ricardo Robaina <rrobaina@redhat.com>
---
arch/microblaze/kernel/ptrace.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/microblaze/kernel/ptrace.c b/arch/microblaze/kernel/ptrace.c
index 236264e932d6..5fe9e3a150f4 100644
--- a/arch/microblaze/kernel/ptrace.c
+++ b/arch/microblaze/kernel/ptrace.c
@@ -147,7 +147,7 @@ asmlinkage unsigned long do_syscall_trace_enter(struct pt_regs *regs)
*/
ret = -1L;
- audit_syscall_entry(regs->r12, regs->r5, regs->r6, regs->r7, regs->r8);
+ audit_syscall_entry(regs->r12, regs);
return ret ?: regs->r12;
}
--
2.55.0
^ permalink raw reply related [flat|nested] 16+ messages in thread* [PATCH v2 07/13] mips: pass pt_regs to audit_syscall_entry()
2026-09-02 14:43 [PATCH v2 00/13] audit: log all six syscall arguments in the SYSCALL record Ricardo Robaina
` (5 preceding siblings ...)
2026-09-02 14:43 ` [PATCH v2 06/13] microblaze: " Ricardo Robaina
@ 2026-09-02 14:43 ` Ricardo Robaina
2026-09-02 14:43 ` [PATCH v2 08/13] openrisc: " Ricardo Robaina
` (5 subsequent siblings)
12 siblings, 0 replies; 16+ messages in thread
From: Ricardo Robaina @ 2026-09-02 14:43 UTC (permalink / raw)
To: audit, linux-kernel, linux-alpha, linux-arm-kernel, linux-csky,
linux-mips, linux-openrisc, linux-parisc, linux-sh, sparclinux,
linux-um, bpf
Cc: paul, eparis, sgrubb, oleg, richard.henderson, mattst88, linmag7,
linux, catalin.marinas, will, guoren, monstr, tsbogend, jonas,
stefan.kristiansson, shorne, James.Bottomley, deller, ysato,
dalias, glaubitz, davem, andreas, richard, anton.ivanov, johannes,
chris, jcmvbkbc, tglx, peterz, luto, Ricardo Robaina
audit_syscall_entry() now takes a pointer to pt_regs and extracts
the syscall arguments itself via syscall_get_arguments(). Drop the
individual argument registers from the call and pass regs instead.
Signed-off-by: Ricardo Robaina <rrobaina@redhat.com>
---
arch/mips/kernel/ptrace.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/arch/mips/kernel/ptrace.c b/arch/mips/kernel/ptrace.c
index 17dc7249b8ca..7a09b4671a54 100644
--- a/arch/mips/kernel/ptrace.c
+++ b/arch/mips/kernel/ptrace.c
@@ -1338,9 +1338,7 @@ asmlinkage long syscall_trace_enter(struct pt_regs *regs)
if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
trace_sys_enter(regs, regs->regs[2]);
- audit_syscall_entry(current_thread_info()->syscall,
- regs->regs[4], regs->regs[5],
- regs->regs[6], regs->regs[7]);
+ audit_syscall_entry(current_thread_info()->syscall, regs);
/*
* Negative syscall numbers are mistaken for rejected syscalls, but
--
2.55.0
^ permalink raw reply related [flat|nested] 16+ messages in thread* [PATCH v2 08/13] openrisc: pass pt_regs to audit_syscall_entry()
2026-09-02 14:43 [PATCH v2 00/13] audit: log all six syscall arguments in the SYSCALL record Ricardo Robaina
` (6 preceding siblings ...)
2026-09-02 14:43 ` [PATCH v2 07/13] mips: " Ricardo Robaina
@ 2026-09-02 14:43 ` Ricardo Robaina
2026-09-02 14:43 ` [PATCH v2 09/13] parisc: " Ricardo Robaina
` (4 subsequent siblings)
12 siblings, 0 replies; 16+ messages in thread
From: Ricardo Robaina @ 2026-09-02 14:43 UTC (permalink / raw)
To: audit, linux-kernel, linux-alpha, linux-arm-kernel, linux-csky,
linux-mips, linux-openrisc, linux-parisc, linux-sh, sparclinux,
linux-um, bpf
Cc: paul, eparis, sgrubb, oleg, richard.henderson, mattst88, linmag7,
linux, catalin.marinas, will, guoren, monstr, tsbogend, jonas,
stefan.kristiansson, shorne, James.Bottomley, deller, ysato,
dalias, glaubitz, davem, andreas, richard, anton.ivanov, johannes,
chris, jcmvbkbc, tglx, peterz, luto, Ricardo Robaina
audit_syscall_entry() now takes a pointer to pt_regs and extracts
the syscall arguments itself via syscall_get_arguments(). Drop the
individual argument registers from the call and pass regs instead.
Signed-off-by: Ricardo Robaina <rrobaina@redhat.com>
---
arch/openrisc/kernel/ptrace.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/arch/openrisc/kernel/ptrace.c b/arch/openrisc/kernel/ptrace.c
index 287a9718f0c6..eca613b84ff8 100644
--- a/arch/openrisc/kernel/ptrace.c
+++ b/arch/openrisc/kernel/ptrace.c
@@ -301,8 +301,7 @@ asmlinkage long do_syscall_trace_enter(struct pt_regs *regs)
*/
ret = -1L;
- audit_syscall_entry(regs->gpr[11], regs->gpr[3], regs->gpr[4],
- regs->gpr[5], regs->gpr[6]);
+ audit_syscall_entry(regs->gpr[11], regs);
return ret ? : regs->gpr[11];
}
--
2.55.0
^ permalink raw reply related [flat|nested] 16+ messages in thread* [PATCH v2 09/13] parisc: pass pt_regs to audit_syscall_entry()
2026-09-02 14:43 [PATCH v2 00/13] audit: log all six syscall arguments in the SYSCALL record Ricardo Robaina
` (7 preceding siblings ...)
2026-09-02 14:43 ` [PATCH v2 08/13] openrisc: " Ricardo Robaina
@ 2026-09-02 14:43 ` Ricardo Robaina
2026-09-02 14:43 ` [PATCH v2 10/13] sh: " Ricardo Robaina
` (3 subsequent siblings)
12 siblings, 0 replies; 16+ messages in thread
From: Ricardo Robaina @ 2026-09-02 14:43 UTC (permalink / raw)
To: audit, linux-kernel, linux-alpha, linux-arm-kernel, linux-csky,
linux-mips, linux-openrisc, linux-parisc, linux-sh, sparclinux,
linux-um, bpf
Cc: paul, eparis, sgrubb, oleg, richard.henderson, mattst88, linmag7,
linux, catalin.marinas, will, guoren, monstr, tsbogend, jonas,
stefan.kristiansson, shorne, James.Bottomley, deller, ysato,
dalias, glaubitz, davem, andreas, richard, anton.ivanov, johannes,
chris, jcmvbkbc, tglx, peterz, luto, Ricardo Robaina
audit_syscall_entry() now takes a pointer to pt_regs and extracts
the syscall arguments itself via syscall_get_arguments(). Drop the
individual argument registers from the call and pass regs instead.
Signed-off-by: Ricardo Robaina <rrobaina@redhat.com>
---
arch/parisc/kernel/ptrace.c | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)
diff --git a/arch/parisc/kernel/ptrace.c b/arch/parisc/kernel/ptrace.c
index 1d9e210702e1..948e0cf29ba4 100644
--- a/arch/parisc/kernel/ptrace.c
+++ b/arch/parisc/kernel/ptrace.c
@@ -359,15 +359,10 @@ long do_syscall_trace_enter(struct pt_regs *regs)
#ifdef CONFIG_64BIT
if (!is_compat_task())
- audit_syscall_entry(regs->gr[20], regs->gr[26], regs->gr[25],
- regs->gr[24], regs->gr[23]);
+ audit_syscall_entry(regs->gr[20], regs);
else
#endif
- audit_syscall_entry(regs->gr[20] & 0xffffffff,
- regs->gr[26] & 0xffffffff,
- regs->gr[25] & 0xffffffff,
- regs->gr[24] & 0xffffffff,
- regs->gr[23] & 0xffffffff);
+ audit_syscall_entry(regs->gr[20] & 0xffffffff, regs);
/*
* Sign extend the syscall number to 64bit since it may have been
--
2.55.0
^ permalink raw reply related [flat|nested] 16+ messages in thread* [PATCH v2 10/13] sh: pass pt_regs to audit_syscall_entry()
2026-09-02 14:43 [PATCH v2 00/13] audit: log all six syscall arguments in the SYSCALL record Ricardo Robaina
` (8 preceding siblings ...)
2026-09-02 14:43 ` [PATCH v2 09/13] parisc: " Ricardo Robaina
@ 2026-09-02 14:43 ` Ricardo Robaina
2026-09-02 14:43 ` [PATCH v2 11/13] sparc64: " Ricardo Robaina
` (2 subsequent siblings)
12 siblings, 0 replies; 16+ messages in thread
From: Ricardo Robaina @ 2026-09-02 14:43 UTC (permalink / raw)
To: audit, linux-kernel, linux-alpha, linux-arm-kernel, linux-csky,
linux-mips, linux-openrisc, linux-parisc, linux-sh, sparclinux,
linux-um, bpf
Cc: paul, eparis, sgrubb, oleg, richard.henderson, mattst88, linmag7,
linux, catalin.marinas, will, guoren, monstr, tsbogend, jonas,
stefan.kristiansson, shorne, James.Bottomley, deller, ysato,
dalias, glaubitz, davem, andreas, richard, anton.ivanov, johannes,
chris, jcmvbkbc, tglx, peterz, luto, Ricardo Robaina
audit_syscall_entry() now takes a pointer to pt_regs and extracts
the syscall arguments itself via syscall_get_arguments(). Drop the
individual argument registers from the call and pass regs instead.
Signed-off-by: Ricardo Robaina <rrobaina@redhat.com>
---
arch/sh/kernel/ptrace_32.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/arch/sh/kernel/ptrace_32.c b/arch/sh/kernel/ptrace_32.c
index 8794081483fb..e138f529ee7e 100644
--- a/arch/sh/kernel/ptrace_32.c
+++ b/arch/sh/kernel/ptrace_32.c
@@ -466,8 +466,7 @@ asmlinkage long do_syscall_trace_enter(struct pt_regs *regs)
if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
trace_sys_enter(regs, regs->regs[0]);
- audit_syscall_entry(regs->regs[3], regs->regs[4], regs->regs[5],
- regs->regs[6], regs->regs[7]);
+ audit_syscall_entry(regs->regs[3], regs);
return 0;
}
--
2.55.0
^ permalink raw reply related [flat|nested] 16+ messages in thread* [PATCH v2 11/13] sparc64: pass pt_regs to audit_syscall_entry()
2026-09-02 14:43 [PATCH v2 00/13] audit: log all six syscall arguments in the SYSCALL record Ricardo Robaina
` (9 preceding siblings ...)
2026-09-02 14:43 ` [PATCH v2 10/13] sh: " Ricardo Robaina
@ 2026-09-02 14:43 ` Ricardo Robaina
2026-09-02 14:43 ` [PATCH v2 12/13] um: " Ricardo Robaina
2026-09-02 14:43 ` [PATCH v2 13/13] xtensa: " Ricardo Robaina
12 siblings, 0 replies; 16+ messages in thread
From: Ricardo Robaina @ 2026-09-02 14:43 UTC (permalink / raw)
To: audit, linux-kernel, linux-alpha, linux-arm-kernel, linux-csky,
linux-mips, linux-openrisc, linux-parisc, linux-sh, sparclinux,
linux-um, bpf
Cc: paul, eparis, sgrubb, oleg, richard.henderson, mattst88, linmag7,
linux, catalin.marinas, will, guoren, monstr, tsbogend, jonas,
stefan.kristiansson, shorne, James.Bottomley, deller, ysato,
dalias, glaubitz, davem, andreas, richard, anton.ivanov, johannes,
chris, jcmvbkbc, tglx, peterz, luto, Ricardo Robaina
audit_syscall_entry() now takes a pointer to pt_regs and extracts
the syscall arguments itself via syscall_get_arguments(). Drop the
individual argument registers from the call and pass regs instead.
Signed-off-by: Ricardo Robaina <rrobaina@redhat.com>
---
arch/sparc/kernel/ptrace_64.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/arch/sparc/kernel/ptrace_64.c b/arch/sparc/kernel/ptrace_64.c
index 825ddf55fece..b162585b4a74 100644
--- a/arch/sparc/kernel/ptrace_64.c
+++ b/arch/sparc/kernel/ptrace_64.c
@@ -1098,9 +1098,7 @@ asmlinkage int syscall_trace_enter(struct pt_regs *regs)
if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
trace_sys_enter(regs, regs->u_regs[UREG_G1]);
- audit_syscall_entry(regs->u_regs[UREG_G1], regs->u_regs[UREG_I0],
- regs->u_regs[UREG_I1], regs->u_regs[UREG_I2],
- regs->u_regs[UREG_I3]);
+ audit_syscall_entry(regs->u_regs[UREG_G1], regs);
return ret;
}
--
2.55.0
^ permalink raw reply related [flat|nested] 16+ messages in thread* [PATCH v2 12/13] um: pass pt_regs to audit_syscall_entry()
2026-09-02 14:43 [PATCH v2 00/13] audit: log all six syscall arguments in the SYSCALL record Ricardo Robaina
` (10 preceding siblings ...)
2026-09-02 14:43 ` [PATCH v2 11/13] sparc64: " Ricardo Robaina
@ 2026-09-02 14:43 ` Ricardo Robaina
2026-09-02 14:43 ` [PATCH v2 13/13] xtensa: " Ricardo Robaina
12 siblings, 0 replies; 16+ messages in thread
From: Ricardo Robaina @ 2026-09-02 14:43 UTC (permalink / raw)
To: audit, linux-kernel, linux-alpha, linux-arm-kernel, linux-csky,
linux-mips, linux-openrisc, linux-parisc, linux-sh, sparclinux,
linux-um, bpf
Cc: paul, eparis, sgrubb, oleg, richard.henderson, mattst88, linmag7,
linux, catalin.marinas, will, guoren, monstr, tsbogend, jonas,
stefan.kristiansson, shorne, James.Bottomley, deller, ysato,
dalias, glaubitz, davem, andreas, richard, anton.ivanov, johannes,
chris, jcmvbkbc, tglx, peterz, luto, Ricardo Robaina
audit_syscall_entry() now takes a pointer to pt_regs and extracts
the syscall arguments itself via syscall_get_arguments(). Drop the
individual argument registers from the call and pass regs instead.
Signed-off-by: Ricardo Robaina <rrobaina@redhat.com>
---
arch/um/kernel/ptrace.c | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/arch/um/kernel/ptrace.c b/arch/um/kernel/ptrace.c
index 7da0a5223aa6..bdc1b18bb342 100644
--- a/arch/um/kernel/ptrace.c
+++ b/arch/um/kernel/ptrace.c
@@ -123,11 +123,7 @@ static void send_sigtrap(struct uml_pt_regs *regs, int error_code)
*/
int syscall_trace_enter(struct pt_regs *regs)
{
- audit_syscall_entry(UPT_SYSCALL_NR(®s->regs),
- UPT_SYSCALL_ARG1(®s->regs),
- UPT_SYSCALL_ARG2(®s->regs),
- UPT_SYSCALL_ARG3(®s->regs),
- UPT_SYSCALL_ARG4(®s->regs));
+ audit_syscall_entry(UPT_SYSCALL_NR(®s->regs), regs);
if (test_thread_flag(TIF_SYSCALL_TRACEPOINT))
trace_sys_enter(regs, UPT_SYSCALL_NR(®s->regs));
--
2.55.0
^ permalink raw reply related [flat|nested] 16+ messages in thread* [PATCH v2 13/13] xtensa: pass pt_regs to audit_syscall_entry()
2026-09-02 14:43 [PATCH v2 00/13] audit: log all six syscall arguments in the SYSCALL record Ricardo Robaina
` (11 preceding siblings ...)
2026-09-02 14:43 ` [PATCH v2 12/13] um: " Ricardo Robaina
@ 2026-09-02 14:43 ` Ricardo Robaina
12 siblings, 0 replies; 16+ messages in thread
From: Ricardo Robaina @ 2026-09-02 14:43 UTC (permalink / raw)
To: audit, linux-kernel, linux-alpha, linux-arm-kernel, linux-csky,
linux-mips, linux-openrisc, linux-parisc, linux-sh, sparclinux,
linux-um, bpf
Cc: paul, eparis, sgrubb, oleg, richard.henderson, mattst88, linmag7,
linux, catalin.marinas, will, guoren, monstr, tsbogend, jonas,
stefan.kristiansson, shorne, James.Bottomley, deller, ysato,
dalias, glaubitz, davem, andreas, richard, anton.ivanov, johannes,
chris, jcmvbkbc, tglx, peterz, luto, Ricardo Robaina
audit_syscall_entry() now takes a pointer to pt_regs and extracts
the syscall arguments itself via syscall_get_arguments(). Drop the
individual argument registers from the call and pass regs instead.
Signed-off-by: Ricardo Robaina <rrobaina@redhat.com>
---
arch/xtensa/kernel/ptrace.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/arch/xtensa/kernel/ptrace.c b/arch/xtensa/kernel/ptrace.c
index 364e4fdabb00..327e00c2ebde 100644
--- a/arch/xtensa/kernel/ptrace.c
+++ b/arch/xtensa/kernel/ptrace.c
@@ -561,9 +561,7 @@ int do_syscall_trace_enter(struct pt_regs *regs)
if (test_thread_flag(TIF_SYSCALL_TRACEPOINT))
trace_sys_enter(regs, syscall_get_nr(current, regs));
- audit_syscall_entry(regs->syscall, regs->areg[6],
- regs->areg[3], regs->areg[4],
- regs->areg[5]);
+ audit_syscall_entry(regs->syscall, regs);
return 1;
}
--
2.55.0
^ permalink raw reply related [flat|nested] 16+ messages in thread