Skip to content

Commit e70bf2e

Browse files
namhyunggregkh
authored andcommitted
perf test: Free formats for perf pmu parse test
[ Upstream commit d26383d ] The following leaks were detected by ASAN: Indirect leak of 360 byte(s) in 9 object(s) allocated from: #0 0x7fecc305180e in calloc (/lib/x86_64-linux-gnu/libasan.so.5+0x10780e) #1 0x560578f6dce5 in perf_pmu__new_format util/pmu.c:1333 #2 0x560578f752fc in perf_pmu_parse util/pmu.y:59 #3 0x560578f6a8b7 in perf_pmu__format_parse util/pmu.c:73 #4 0x560578e07045 in test__pmu tests/pmu.c:155 #5 0x560578de109b in run_test tests/builtin-test.c:410 #6 0x560578de109b in test_and_print tests/builtin-test.c:440 #7 0x560578de401a in __cmd_test tests/builtin-test.c:661 #8 0x560578de401a in cmd_test tests/builtin-test.c:807 #9 0x560578e49354 in run_builtin /home/namhyung/project/linux/tools/perf/perf.c:312 #10 0x560578ce71a8 in handle_internal_command /home/namhyung/project/linux/tools/perf/perf.c:364 #11 0x560578ce71a8 in run_argv /home/namhyung/project/linux/tools/perf/perf.c:408 #12 0x560578ce71a8 in main /home/namhyung/project/linux/tools/perf/perf.c:538 #13 0x7fecc2b7acc9 in __libc_start_main ../csu/libc-start.c:308 Fixes: cff7f95 ("perf tests: Move pmu tests into separate object") Signed-off-by: Namhyung Kim <[email protected]> Acked-by: Jiri Olsa <[email protected]> Cc: Alexander Shishkin <[email protected]> Cc: Andi Kleen <[email protected]> Cc: Ian Rogers <[email protected]> Cc: Mark Rutland <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Stephane Eranian <[email protected]> Link: http://lore.kernel.org/lkml/[email protected] Signed-off-by: Arnaldo Carvalho de Melo <[email protected]> Signed-off-by: Sasha Levin <[email protected]>
1 parent ffb5d74 commit e70bf2e

File tree

3 files changed

+13
-0
lines changed

3 files changed

+13
-0
lines changed

tools/perf/tests/pmu.c

+1
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ int test__pmu(int subtest __maybe_unused)
169169
ret = 0;
170170
} while (0);
171171

172+
perf_pmu__del_formats(&formats);
172173
test_format_dir_put(format);
173174
return ret;
174175
}

tools/perf/util/pmu.c

+11
Original file line numberDiff line numberDiff line change
@@ -1018,6 +1018,17 @@ void perf_pmu__set_format(unsigned long *bits, long from, long to)
10181018
set_bit(b, bits);
10191019
}
10201020

1021+
void perf_pmu__del_formats(struct list_head *formats)
1022+
{
1023+
struct perf_pmu_format *fmt, *tmp;
1024+
1025+
list_for_each_entry_safe(fmt, tmp, formats, list) {
1026+
list_del(&fmt->list);
1027+
free(fmt->name);
1028+
free(fmt);
1029+
}
1030+
}
1031+
10211032
static int sub_non_neg(int a, int b)
10221033
{
10231034
if (b > a)

tools/perf/util/pmu.h

+1
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ int perf_pmu__new_format(struct list_head *list, char *name,
7171
int config, unsigned long *bits);
7272
void perf_pmu__set_format(unsigned long *bits, long from, long to);
7373
int perf_pmu__format_parse(char *dir, struct list_head *head);
74+
void perf_pmu__del_formats(struct list_head *formats);
7475

7576
struct perf_pmu *perf_pmu__scan(struct perf_pmu *pmu);
7677

0 commit comments

Comments
 (0)