]> git.baikalelectronics.ru Git - kernel.git/commitdiff
perf metric: Fix memory leaks
authorIan Rogers <irogers@google.com>
Sun, 7 Nov 2021 09:00:02 +0000 (01:00 -0800)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Sun, 7 Nov 2021 18:39:28 +0000 (15:39 -0300)
Certain error paths may leak memory as caught by address sanitizer.
Ensure this is cleaned up to make sure address/leak sanitizer is happy.

Fixes: 531381d0e6f1ceb5 ("perf metrics: Modify setup and deduplication")
Signed-off-by: Ian Rogers <irogers@google.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: John Garry <john.garry@huawei.com>
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>
Link: http://lore.kernel.org/lkml/20211107090002.3784612-3-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/metricgroup.c

index 1b43cbc1961ddac4bc990fb04ff46911058b2572..fffe02aae3ed1fa538da9400753218d2be37c232 100644 (file)
@@ -228,6 +228,7 @@ static void metric__free(struct metric *m)
        free(m->metric_refs);
        expr__ctx_free(m->pctx);
        free((char *)m->modifier);
+       evlist__delete(m->evlist);
        free(m);
 }
 
@@ -1482,8 +1483,10 @@ static int parse_groups(struct evlist *perf_evlist, const char *str,
        }
 
 
-       if (combined_evlist)
+       if (combined_evlist) {
                evlist__splice_list_tail(perf_evlist, &combined_evlist->core.entries);
+               evlist__delete(combined_evlist);
+       }
 
        list_for_each_entry(m, &metric_list, nd) {
                if (m->evlist)