Skip to content

Commit 40d2ea4

Browse files
namhyungSomasundaram Krishnasamy
authored and
Somasundaram Krishnasamy
committed
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]> (cherry picked from commit 1cf043baa068a5deecaf800e9122b462ac418159)
1 parent 4077072 commit 40d2ea4

File tree

3 files changed

+13
-0
lines changed

3 files changed

+13
-0
lines changed

tools/perf/tests/pmu.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ int test__pmu(struct test *test __maybe_unused, int subtest __maybe_unused)
172172
ret = 0;
173173
} while (0);
174174

175+
perf_pmu__del_formats(&formats);
175176
test_format_dir_put(format);
176177
return ret;
177178
}

tools/perf/util/pmu.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1100,6 +1100,17 @@ void perf_pmu__set_format(unsigned long *bits, long from, long to)
11001100
set_bit(b, bits);
11011101
}
11021102

1103+
void perf_pmu__del_formats(struct list_head *formats)
1104+
{
1105+
struct perf_pmu_format *fmt, *tmp;
1106+
1107+
list_for_each_entry_safe(fmt, tmp, formats, list) {
1108+
list_del(&fmt->list);
1109+
free(fmt->name);
1110+
free(fmt);
1111+
}
1112+
}
1113+
11031114
static int sub_non_neg(int a, int b)
11041115
{
11051116
if (b > a)

tools/perf/util/pmu.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ int perf_pmu__new_format(struct list_head *list, char *name,
7979
int config, unsigned long *bits);
8080
void perf_pmu__set_format(unsigned long *bits, long from, long to);
8181
int perf_pmu__format_parse(char *dir, struct list_head *head);
82+
void perf_pmu__del_formats(struct list_head *formats);
8283

8384
struct perf_pmu *perf_pmu__scan(struct perf_pmu *pmu);
8485

0 commit comments

Comments
 (0)