• Ravi Bangoria's avatar
    powerpc/perf: Dereference BHRB entries safely · f41d84dd
    Ravi Bangoria authored
    It's theoretically possible that branch instructions recorded in
    BHRB (Branch History Rolling Buffer) entries have already been
    unmapped before they are processed by the kernel. Hence, trying to
    dereference such memory location will result in a crash. eg:
    
        Unable to handle kernel paging request for data at address 0xd000000019c41764
        Faulting instruction address: 0xc000000000084a14
        NIP [c000000000084a14] branch_target+0x4/0x70
        LR [c0000000000eb828] record_and_restart+0x568/0x5c0
        Call Trace:
        [c0000000000eb3b4] record_and_restart+0xf4/0x5c0 (unreliable)
        [c0000000000ec378] perf_event_interrupt+0x298/0x460
        [c000000000027964] performance_monitor_exception+0x54/0x70
        [c000000000009ba4] performance_monitor_common+0x114/0x120
    
    Fix it by deferefencing the addresses safely.
    
    Fixes: 69123184 ("powerpc/perf: Fix setting of "to" addresses for BHRB")
    Cc: stable@vger.kernel.org # v3.10+
    Suggested-by: default avatarNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
    Signed-off-by: default avatarRavi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
    Reviewed-by: default avatarNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
    [mpe: Use probe_kernel_read() which is clearer, tweak change log]
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    f41d84dd
core-book3s.c 56.2 KB