• Tristan Hume's avatar
    perf/x86/intel/pt: Fix crash with stop filters in single-range mode · 1d909345
    Tristan Hume authored
    Add a check for !buf->single before calling pt_buffer_region_size in a
    place where a missing check can cause a kernel crash.
    
    Fixes a bug introduced by commit 67063847 ("perf/x86/intel/pt:
    Opportunistically use single range output mode"), which added a
    support for PT single-range output mode. Since that commit if a PT
    stop filter range is hit while tracing, the kernel will crash because
    of a null pointer dereference in pt_handle_status due to calling
    pt_buffer_region_size without a ToPA configured.
    
    The commit which introduced single-range mode guarded almost all uses of
    the ToPA buffer variables with checks of the buf->single variable, but
    missed the case where tracing was stopped by the PT hardware, which
    happens when execution hits a configured stop filter.
    
    Tested that hitting a stop filter while PT recording successfully
    records a trace with this patch but crashes without this patch.
    
    Fixes: 67063847 ("perf/x86/intel/pt: Opportunistically use single range output mode")
    Signed-off-by: default avatarTristan Hume <tristan@thume.ca>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
    Cc: stable@kernel.org
    Link: https://lkml.kernel.org/r/20220127220806.73664-1-tristan@thume.ca
    1d909345
pt.c 42.2 KB