Re: [patch 3/4] entry: Make return type of syscall_trace_enter() bool

From: Radu Rendec

Date: Tue Jul 14 2026 - 11:43:02 EST


On Sun, 2026-07-12 at 23:25 +0200, Thomas Gleixner wrote:
> From: Thomas Gleixner <tglx@xxxxxxxxxx>
>
> This prepares for changing the return types of
> syscall_enter_from_user_mode[_work]() to bool, which in turn separates the
> decision of invoking the syscall from the syscall number, which might have
> been changed in the call by ptrace, seccomp, tracing.
>
> Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxx>
> ---
>  include/linux/entry-common.h |   18 +++++++++++-------
>  1 file changed, 11 insertions(+), 7 deletions(-)
> --- a/include/linux/entry-common.h
> +++ b/include/linux/entry-common.h
> @@ -72,7 +72,7 @@ static __always_inline long syscall_trac
>   */
>   if (work & SYSCALL_WORK_SYSCALL_USER_DISPATCH) {
>   if (syscall_user_dispatch(regs))
> - return -1L;
> + return false;
>   }
>  
>   /*
> @@ -87,13 +87,13 @@ static __always_inline long syscall_trac
>   if (work & (SYSCALL_WORK_SYSCALL_TRACE | SYSCALL_WORK_SYSCALL_EMU)) {
>   if (!arch_ptrace_report_syscall_permit_entry(regs) ||
>       (work & SYSCALL_WORK_SYSCALL_EMU))
> - return -1L;
> + return false;
>   }
>  
>   /* Do seccomp after ptrace, to catch any tracer changes. */
>   if (work & SYSCALL_WORK_SECCOMP) {
>   if (!__seccomp_permit_syscall())
> - return -1L;
> + return false;
>   }
>  
>   if (unlikely(work & SYSCALL_WORK_SYSCALL_TRACEPOINT))
> @@ -102,8 +102,7 @@ static __always_inline long syscall_trac
>   if (unlikely(audit_context()))
>   syscall_enter_audit(regs);
>  
> - /* Either of the above might have changed the syscall number */
> - return syscall_get_nr(current, regs);
> + return true;
>  }
>  
>  /**
> @@ -133,8 +132,13 @@ static __always_inline long syscall_ente
>  {
>   unsigned long work = READ_ONCE(current_thread_info()->syscall_work);
>  
> - if (work & SYSCALL_WORK_ENTER)
> - syscall = syscall_trace_enter(regs, work, syscall);
> + if (work & SYSCALL_WORK_ENTER) {
> + if (!syscall_trace_enter(regs, work, syscall))
> + return -1L;
> +
> + /* Reread the syscall number as it might have been modified */

nit: I would add "in the call above by ptrace, seccomp, tracing" - which
is actually in your commit message, but would make it immediately obvious
when reading the code.

> + syscall = syscall_get_nr(current, regs);
> + }
>  
>   return syscall;
>  }

Reviewed-by: Radu Rendec <radu@xxxxxxxxxx>