lkml.org 
[lkml]   [2019]   [Nov]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[PATCH v6 04/10] perf tools: splice events onto evlist even on error
    From
    If event parsing fails the event list is leaked, instead splice the list
    onto the out result and let the caller cleanup.

    An example input for parse_events found by libFuzzer that reproduces
    this memory leak is 'm{'.

    Signed-off-by: Ian Rogers <irogers@google.com>
    ---
    tools/perf/util/parse-events.c | 17 +++++++++++------
    1 file changed, 11 insertions(+), 6 deletions(-)

    diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
    index e9b958d6c534..03e54a2d8685 100644
    --- a/tools/perf/util/parse-events.c
    +++ b/tools/perf/util/parse-events.c
    @@ -1950,15 +1950,20 @@ int parse_events(struct evlist *evlist, const char *str,

    ret = parse_events__scanner(str, &parse_state, PE_START_EVENTS);
    perf_pmu__parse_cleanup();
    +
    + if (!ret && list_empty(&parse_state.list)) {
    + WARN_ONCE(true, "WARNING: event parser found nothing\n");
    + return -1;
    + }
    +
    + /*
    + * Add list to the evlist even with errors to allow callers to clean up.
    + */
    + perf_evlist__splice_list_tail(evlist, &parse_state.list);
    +
    if (!ret) {
    struct evsel *last;

    - if (list_empty(&parse_state.list)) {
    - WARN_ONCE(true, "WARNING: event parser found nothing\n");
    - return -1;
    - }
    -
    - perf_evlist__splice_list_tail(evlist, &parse_state.list);
    evlist->nr_groups += parse_state.nr_groups;
    last = evlist__last(evlist);
    last->cmdline_group_boundary = true;
    --
    2.24.0.432.g9d3f5f5b63-goog
    \
     
     \ /
      Last update: 2019-11-07 23:16    [W:2.662 / U:0.160 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site