mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
perf list: Fix memory leaks in print_tracepoint_events()
It should free entries (not only the array) filled by scandirat() after use. Reviewed-by: Ian Rogers <irogers@google.com> Signed-off-by: Namhyung Kim <namhyung@kernel.org> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Link: https://lore.kernel.org/r/20230427230502.1526136-1-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
b9f82b5c63
commit
7586d11d36
1 changed files with 8 additions and 4 deletions
|
@ -83,11 +83,11 @@ void print_tracepoint_events(const struct print_callbacks *print_cb __maybe_unus
|
|||
if (sys_dirent->d_type != DT_DIR ||
|
||||
!strcmp(sys_dirent->d_name, ".") ||
|
||||
!strcmp(sys_dirent->d_name, ".."))
|
||||
continue;
|
||||
goto next_sys;
|
||||
|
||||
dir_fd = openat(events_fd, sys_dirent->d_name, O_PATH);
|
||||
if (dir_fd < 0)
|
||||
continue;
|
||||
goto next_sys;
|
||||
|
||||
evt_items = scandirat(events_fd, sys_dirent->d_name, &evt_namelist, NULL, alphasort);
|
||||
for (int j = 0; j < evt_items; j++) {
|
||||
|
@ -98,12 +98,12 @@ void print_tracepoint_events(const struct print_callbacks *print_cb __maybe_unus
|
|||
if (evt_dirent->d_type != DT_DIR ||
|
||||
!strcmp(evt_dirent->d_name, ".") ||
|
||||
!strcmp(evt_dirent->d_name, ".."))
|
||||
continue;
|
||||
goto next_evt;
|
||||
|
||||
snprintf(evt_path, sizeof(evt_path), "%s/id", evt_dirent->d_name);
|
||||
evt_fd = openat(dir_fd, evt_path, O_RDONLY);
|
||||
if (evt_fd < 0)
|
||||
continue;
|
||||
goto next_evt;
|
||||
close(evt_fd);
|
||||
|
||||
snprintf(evt_path, MAXPATHLEN, "%s:%s",
|
||||
|
@ -119,9 +119,13 @@ void print_tracepoint_events(const struct print_callbacks *print_cb __maybe_unus
|
|||
/*desc=*/NULL,
|
||||
/*long_desc=*/NULL,
|
||||
/*encoding_desc=*/NULL);
|
||||
next_evt:
|
||||
free(evt_namelist[j]);
|
||||
}
|
||||
close(dir_fd);
|
||||
free(evt_namelist);
|
||||
next_sys:
|
||||
free(sys_namelist[i]);
|
||||
}
|
||||
|
||||
free(sys_namelist);
|
||||
|
|
Loading…
Add table
Reference in a new issue