On Sun, 2026-07-12 at 23:25 +0200, Thomas Gleixner wrote: > From: Thomas Gleixner <[email protected]> > > 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 <[email protected]> > --- > 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 <[email protected]>
