On 7/13/2026 5:25 AM, Thomas Gleixner wrote:
> Move it out of line and let it reread the syscall number on it's own. That
> makes the low level entry code denser and allows to move the reread to the
> call site of syscall_trace_enter() once the tracer is fixed up.
> 
> Signed-off-by: Thomas Gleixner <[email protected]>
> ---
>  include/linux/entry-common.h  |   14 +++-----------
>  kernel/entry/syscall-common.c |   10 ++++++++++
>  2 files changed, 13 insertions(+), 11 deletions(-)
> 
> --- a/include/linux/entry-common.h
> +++ b/include/linux/entry-common.h
> @@ -60,16 +60,7 @@ static __always_inline bool arch_ptrace_
>  
>  long trace_syscall_enter(struct pt_regs *regs, long syscall);
>  void trace_syscall_exit(struct pt_regs *regs, long ret);
> -
> -static inline void syscall_enter_audit(struct pt_regs *regs, long syscall)
> -{
> -     if (unlikely(audit_context())) {
> -             unsigned long args[6];
> -
> -             syscall_get_arguments(current, regs, args);
> -             audit_syscall_entry(syscall, args[0], args[1], args[2], 
> args[3]);
> -     }
> -}
> +void syscall_enter_audit(struct pt_regs *regs);
>  
>  static __always_inline long syscall_trace_enter(struct pt_regs *regs, 
> unsigned long work,
>                                               long syscall)
> @@ -111,7 +102,8 @@ static __always_inline long syscall_trac
>       if (unlikely(work & SYSCALL_WORK_SYSCALL_TRACEPOINT))
>               syscall = trace_syscall_enter(regs, syscall);
>  
> -     syscall_enter_audit(regs, syscall);
> +     if (unlikely(audit_context()))
> +             syscall_enter_audit(regs);

Reviewed-by: Jinjie Ruan <[email protected]>

>  
>       return syscall;
>  }
> --- a/kernel/entry/syscall-common.c
> +++ b/kernel/entry/syscall-common.c
> @@ -1,5 +1,6 @@
>  // SPDX-License-Identifier: GPL-2.0
>  
> +#include <linux/audit.h>
>  #include <linux/entry-common.h>
>  
>  #define CREATE_TRACE_POINTS
> @@ -21,3 +22,12 @@ void trace_syscall_exit(struct pt_regs *
>  {
>       trace_sys_exit(regs, 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]);
> +}
> 


Reply via email to