• Hugh Dickins's avatar
    kaiser: fix intel_bts perf crashes · 145ebf95
    Hugh Dickins authored
    Vince reported perf_fuzzer quickly locks up on 4.15-rc7 with PTI;
    Robert reported Bad RIP with KPTI and Intel BTS also on 4.15-rc7:
    honggfuzz -f /tmp/somedirectorywithatleastonefile \
              --linux_perf_bts_edge -s -- /bin/true
    (honggfuzz from https://github.com/google/honggfuzz) crashed with
    BUG: unable to handle kernel paging request at ffff9d3215100000
    (then narrowed it down to
    perf record --per-thread -e intel_bts//u -- /bin/ls).
    
    The intel_bts driver does not use the 'normal' BTS buffer which is
    exposed through kaiser_add_mapping(), but instead uses the memory
    allocated for the perf AUX buffer.
    
    This obviously comes apart when using PTI, because then the kernel
    mapping, which includes that AUX buffer memory, disappears while
    switched to user page tables.
    
    Easily fixed in old-Kaiser backports, by applying kaiser_add_mapping()
    to those pages; perhaps not so easy for upstream, where 4.15-rc8 commit
    99a9dc98 ("x86,perf: Disable intel_bts when PTI") disables for now.
    
    Slightly reorganized surrounding code in bts_buffer_setup_aux(),
    so it can better match bts_buffer_free_aux(): free_aux with an #ifdef
    to avoid the loop when PTI is off, but setup_aux needs to loop anyway
    (and kaiser_add_mapping() is cheap when PTI config is off or "pti=off").
    Reported-by: default avatarVince Weaver <vincent.weaver@maine.edu>
    Reported-by: default avatarRobert Święcki <robert@swiecki.net>
    Analyzed-by: default avatarPeter Zijlstra <peterz@infradead.org>
    Analyzed-by: default avatarStephane Eranian <eranian@google.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Vince Weaver <vince@deater.net>
    Cc: stable@vger.kernel.org
    Cc: Jiri Kosina <jkosina@suze.cz>
    Signed-off-by: default avatarHugh Dickins <hughd@google.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    145ebf95
perf_event_intel_bts.c 13.5 KB