• Will Deacon's avatar
    arm64: ptrace: avoid using HW_BREAKPOINT_EMPTY for disabled events · cdc27c27
    Will Deacon authored
    Commit 8f34a1da ("arm64: ptrace: use HW_BREAKPOINT_EMPTY type for
    disabled breakpoints") fixed an issue with GDB trying to zero breakpoint
    control registers. The problem there is that the arch hw_breakpoint code
    will attempt to create a (disabled), execute breakpoint of length 0.
    
    This will fail validation and report unexpected failure to GDB. To avoid
    this, we treated disabled breakpoints as HW_BREAKPOINT_EMPTY, but that
    seems to have broken with recent kernels, causing watchpoints to be
    treated as TYPE_INST in the core code and returning ENOSPC for any
    further breakpoints.
    
    This patch fixes the problem by prioritising the `enable' field of the
    breakpoint: if it is cleared, we simply update the perf_event_attr to
    indicate that the thing is disabled and don't bother changing either the
    type or the length. This reinforces the behaviour that the breakpoint
    control register is essentially read-only apart from the enable bit
    when disabling a breakpoint.
    
    Cc: <stable@vger.kernel.org>
    Reported-by: default avatarAaron Liu <liucy214@gmail.com>
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    cdc27c27
ptrace.c 24.3 KB