lkml.org 
[lkml]   [2022]   [Oct]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 6.0 840/862] perf intel-pt: Fix segfault in intel_pt_print_info() with uClibc
    Date
    From: Adrian Hunter <adrian.hunter@intel.com>

    commit 5a3d47071f0ced0431ef82a5fb6bd077ed9493db upstream.

    uClibc segfaulted because NULL was passed as the format to fprintf().

    That happened because one of the format strings was missing and
    intel_pt_print_info() didn't check that before calling fprintf().

    Add the missing format string, and check format is not NULL before calling
    fprintf().

    Fixes: 11fa7cb86b56d361 ("perf tools: Pass Intel PT information for decoding MTC and CYC")
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Acked-by: Namhyung Kim <namhyung@kernel.org>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20221012082259.22394-2-adrian.hunter@intel.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    tools/perf/util/intel-pt.c | 9 +++++++--
    1 file changed, 7 insertions(+), 2 deletions(-)

    --- a/tools/perf/util/intel-pt.c
    +++ b/tools/perf/util/intel-pt.c
    @@ -4033,6 +4033,7 @@ static const char * const intel_pt_info_
    [INTEL_PT_SNAPSHOT_MODE] = " Snapshot mode %"PRId64"\n",
    [INTEL_PT_PER_CPU_MMAPS] = " Per-cpu maps %"PRId64"\n",
    [INTEL_PT_MTC_BIT] = " MTC bit %#"PRIx64"\n",
    + [INTEL_PT_MTC_FREQ_BITS] = " MTC freq bits %#"PRIx64"\n",
    [INTEL_PT_TSC_CTC_N] = " TSC:CTC numerator %"PRIu64"\n",
    [INTEL_PT_TSC_CTC_D] = " TSC:CTC denominator %"PRIu64"\n",
    [INTEL_PT_CYC_BIT] = " CYC bit %#"PRIx64"\n",
    @@ -4047,8 +4048,12 @@ static void intel_pt_print_info(__u64 *a
    if (!dump_trace)
    return;

    - for (i = start; i <= finish; i++)
    - fprintf(stdout, intel_pt_info_fmts[i], arr[i]);
    + for (i = start; i <= finish; i++) {
    + const char *fmt = intel_pt_info_fmts[i];
    +
    + if (fmt)
    + fprintf(stdout, fmt, arr[i]);
    + }
    }

    static void intel_pt_print_info_str(const char *name, const char *str)

    \
     
     \ /
      Last update: 2022-10-19 11:45    [W:2.376 / U:3.464 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site