diff options
| author | GuoHan Zhao <zhaoguohan@kylinos.cn> | 2025-09-08 14:52:03 +0800 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2025-10-19 16:37:03 +0200 |
| commit | 3bec6565ecc257093a7ada4b6cff42f5956ecd0c (patch) | |
| tree | 07be3c8ec4f41b79fb04fb0bc36c1995d3a58022 /tools | |
| parent | 0ca35ac560305ccfa76e4cca97e456c6acaf32a4 (diff) | |
| download | linux-3bec6565ecc257093a7ada4b6cff42f5956ecd0c.tar.gz linux-3bec6565ecc257093a7ada4b6cff42f5956ecd0c.tar.bz2 linux-3bec6565ecc257093a7ada4b6cff42f5956ecd0c.zip | |
perf drm_pmu: Fix fd_dir leaks in for_each_drm_fdinfo_in_dir()
[ Upstream commit baa03483fdf3545f2b223a4ca775e1938d956284 ]
Fix file descriptor leak when callback function returns error. The
function was directly returning without closing fdinfo_dir_fd and
fd_dir when cb() returned non-zero value.
Fixes: 28917cb17f9df9c2 ("perf drm_pmu: Add a tool like PMU to expose DRM information")
Reviewed-by: Ian Rogers <irogers@google.com>
Reviewed-by: Markus Elfring <Markus.Elfring@web.de>
Reviewed-by: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: GuoHan Zhao <zhaoguohan@kylinos.cn>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://lore.kernel.org/r/20250908065203.22187-1-zhaoguohan@kylinos.cn
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/perf/util/drm_pmu.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/tools/perf/util/drm_pmu.c b/tools/perf/util/drm_pmu.c index 988890f37ba7..98d4d2b556d4 100644 --- a/tools/perf/util/drm_pmu.c +++ b/tools/perf/util/drm_pmu.c @@ -458,8 +458,10 @@ static int for_each_drm_fdinfo_in_dir(int (*cb)(void *args, int fdinfo_dir_fd, c } ret = cb(args, fdinfo_dir_fd, fd_entry->d_name); if (ret) - return ret; + goto close_fdinfo; } + +close_fdinfo: if (fdinfo_dir_fd != -1) close(fdinfo_dir_fd); closedir(fd_dir); |
