On Tue, Mar 17, 2026 at 9:20 AM Jinjie Ruan <[email protected]> wrote:
> Align the syscall exit reporting logic with the generic entry > framework by skipping the exit stop when PTRACE_SYSEMU_SINGLESTEP is > in effect. > > [Rationale] > When a tracer uses PTRACE_SYSEMU_SINGLESTEP, both _TIF_SYSCALL_EMU > and _TIF_SINGLESTEP flags are set. Currently, arm64 reports a syscall > exit stop whenever _TIF_SINGLESTEP is set, regardless of the > emulation state. > > However, as per the generic entry implementation (see > include/linux/entry-common.h): > "If SYSCALL_EMU is set, then the only reason to report is when SINGLESTEP > is set (i.e. PTRACE_SYSEMU_SINGLESTEP). This syscall instruction has been > already reported in syscall_trace_enter()." > > Since PTRACE_SYSEMU intercepts and skips the actual syscall > execution, reporting a subsequent exit stop is redundant and > inconsistent with the expected behavior of emulated system calls. > > [Changes] > - Introduce report_single_step(): Add a helper to encapsulate the > logic for deciding whether to report a single-step stop at syscall > exit. It returns false if _TIF_SYSCALL_EMU is set, ensuring the > emulated syscall does not trigger a duplicate report. > > - Update syscall_exit_work(): Use the new helper to determine > the stepping state instead of directly checking _TIF_SINGLESTEP. > > [Impact] > - PTRACE_SINGLESTEP: Continues to report exit stops for actual > instructions. > > - PTRACE_SYSEMU: Continues to skip exit stops. > > - PTRACE_SYSEMU_SINGLESTEP: Now correctly skips the redundant exit > stop, aligning arm64 with the generic entry infrastructure. > > Cc: Will Deacon <[email protected]> > Cc: Catalin Marinas <[email protected]> > Signed-off-by: Jinjie Ruan <[email protected]> These small semantic glitches underscores the need to move to generic entry. Reviewed-by: Linus Walleij <[email protected]> Yours, Linus Walleij

