• Will Deacon's avatar
    arm64: ptrace: Consistently use pseudo-singlestep exceptions · ac2081cd
    Will Deacon authored
    Although the arm64 single-step state machine can be fast-forwarded in
    cases where we wish to generate a SIGTRAP without actually executing an
    instruction, this has two major limitations outside of simply skipping
    an instruction due to emulation.
    
    1. Stepping out of a ptrace signal stop into a signal handler where
       SIGTRAP is blocked. Fast-forwarding the stepping state machine in
       this case will result in a forced SIGTRAP, with the handler reset to
       SIG_DFL.
    
    2. The hardware implicitly fast-forwards the state machine when executing
       an SVC instruction for issuing a system call. This can interact badly
       with subsequent ptrace stops signalled during the execution of the
       system call (e.g. SYSCALL_EXIT or seccomp traps), as they may corrupt
       the stepping state by updating the PSTATE for the tracee.
    
    Resolve both of these issues by injecting a pseudo-singlestep exception
    on entry to a signal handler and also on return to userspace following a
    system call.
    
    Cc: <stable@vger.kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Tested-by: default avatarLuis Machado <luis.machado@linaro.org>
    Reported-by: default avatarKeno Fischer <keno@juliacomputing.com>
    Signed-off-by: default avatarWill Deacon <will@kernel.org>
    ac2081cd
signal.c 23.8 KB