• Will Deacon's avatar
    arm64: hw_breakpoint: Don't invoke overflow handler on uaccess watchpoints · 24ebec25
    Will Deacon authored
    Unprivileged memory accesses generated by the so-called "translated"
    instructions (e.g. STTR) at EL1 can cause EL0 watchpoints to fire
    unexpectedly if kernel debugging is enabled. In such cases, the
    hw_breakpoint logic will invoke the user overflow handler which will
    typically raise a SIGTRAP back to the current task. This is futile when
    returning back to the kernel because (a) the signal won't have been
    delivered and (b) userspace can't handle the thing anyway.
    
    Avoid invoking the user overflow handler for watchpoints triggered by
    kernel uaccess routines, and instead single-step over the faulting
    instruction as we would if no overflow handler had been installed.
    
    (Fixes tag identifies the introduction of unprivileged memory accesses,
     which exposed this latent bug in the hw_breakpoint code)
    
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: James Morse <james.morse@arm.com>
    Fixes: 57f4959b ("arm64: kernel: Add support for User Access Override")
    Reported-by: default avatarLuis Machado <luis.machado@linaro.org>
    Signed-off-by: default avatarWill Deacon <will@kernel.org>
    24ebec25
hw_breakpoint.c 25.6 KB