lkml.org 
[lkml]   [2020]   [Sep]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.4 186/330] perf parse-events: Fix 3 use after frees found with clang ASAN
    Date
    From: Ian Rogers <irogers@google.com>

    [ Upstream commit d4953f7ef1a2e87ef732823af35361404d13fea8 ]

    Reproducible with a clang asan build and then running perf test in
    particular 'Parse event definition strings'.

    Signed-off-by: Ian Rogers <irogers@google.com>
    Acked-by: Jiri Olsa <jolsa@redhat.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Leo Yan <leo.yan@linaro.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: clang-built-linux@googlegroups.com
    Link: http://lore.kernel.org/lkml/20200314170356.62914-1-irogers@google.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    tools/perf/util/evsel.c | 1 +
    tools/perf/util/parse-events.c | 4 ++--
    2 files changed, 3 insertions(+), 2 deletions(-)

    diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
    index a844715a352d8..dfc982baecab4 100644
    --- a/tools/perf/util/evsel.c
    +++ b/tools/perf/util/evsel.c
    @@ -1254,6 +1254,7 @@ void perf_evsel__exit(struct evsel *evsel)
    perf_thread_map__put(evsel->core.threads);
    zfree(&evsel->group_name);
    zfree(&evsel->name);
    + zfree(&evsel->pmu_name);
    perf_evsel__object.fini(evsel);
    }

    diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
    index 422ad1888e74f..2a97a5e3aa91e 100644
    --- a/tools/perf/util/parse-events.c
    +++ b/tools/perf/util/parse-events.c
    @@ -1344,7 +1344,7 @@ int parse_events_add_pmu(struct parse_events_state *parse_state,
    evsel = __add_event(list, &parse_state->idx, &attr, NULL, pmu, NULL,
    auto_merge_stats, NULL);
    if (evsel) {
    - evsel->pmu_name = name;
    + evsel->pmu_name = name ? strdup(name) : NULL;
    evsel->use_uncore_alias = use_uncore_alias;
    return 0;
    } else {
    @@ -1385,7 +1385,7 @@ int parse_events_add_pmu(struct parse_events_state *parse_state,
    evsel->snapshot = info.snapshot;
    evsel->metric_expr = info.metric_expr;
    evsel->metric_name = info.metric_name;
    - evsel->pmu_name = name;
    + evsel->pmu_name = name ? strdup(name) : NULL;
    evsel->use_uncore_alias = use_uncore_alias;
    evsel->percore = config_term_percore(&evsel->config_terms);
    }
    --
    2.25.1
    \
     
     \ /
      Last update: 2020-09-18 05:04    [W:4.035 / U:0.068 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site