Skip to content

Commit d26383d

Browse files
namhyungacmel
authored andcommitted
perf test: Free formats for perf pmu parse test
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]>
1 parent 6f47ed6 commit d26383d

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
@@ -173,6 +173,7 @@ int test__pmu(struct test *test __maybe_unused, int subtest __maybe_unused)
173173
ret = 0;
174174
} while (0);
175175

176+
perf_pmu__del_formats(&formats);
176177
test_format_dir_put(format);
177178
return ret;
178179
}

tools/perf/util/pmu.c

+11
Original file line numberDiff line numberDiff line change
@@ -1354,6 +1354,17 @@ void perf_pmu__set_format(unsigned long *bits, long from, long to)
13541354
set_bit(b, bits);
13551355
}
13561356

1357+
void perf_pmu__del_formats(struct list_head *formats)
1358+
{
1359+
struct perf_pmu_format *fmt, *tmp;
1360+
1361+
list_for_each_entry_safe(fmt, tmp, formats, list) {
1362+
list_del(&fmt->list);
1363+
free(fmt->name);
1364+
free(fmt);
1365+
}
1366+
}
1367+
13571368
static int sub_non_neg(int a, int b)
13581369
{
13591370
if (b > a)

tools/perf/util/pmu.h

+1
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ int perf_pmu__new_format(struct list_head *list, char *name,
9494
int config, unsigned long *bits);
9595
void perf_pmu__set_format(unsigned long *bits, long from, long to);
9696
int perf_pmu__format_parse(char *dir, struct list_head *head);
97+
void perf_pmu__del_formats(struct list_head *formats);
9798

9899
struct perf_pmu *perf_pmu__scan(struct perf_pmu *pmu);
99100

0 commit comments

Comments
 (0)