diff options
| author | Zhongqiu Han <[email protected]> | 2024-12-05 08:45:00 +0000 |
|---|---|---|
| committer | Arnaldo Carvalho de Melo <[email protected]> | 2024-12-10 19:59:32 +0000 |
| commit | 03edb7020bb920f1935c3f30acad0bb27fdb99af (patch) | |
| tree | b04c1708c6eee8cc98a10a69669f3efccb5dab5c /tools/perf/util/env.c | |
| parent | perf header: Fix one memory leakage in process_bpf_prog_info() (diff) | |
| download | kernel-03edb7020bb920f1935c3f30acad0bb27fdb99af.tar.gz kernel-03edb7020bb920f1935c3f30acad0bb27fdb99af.zip | |
perf bpf: Fix two memory leakages when calling perf_env__insert_bpf_prog_info()
If perf_env__insert_bpf_prog_info() returns false due to a duplicate bpf
prog info node insertion, the temporary info_node and info_linear memory
will leak. Add a check to ensure the memory is freed if the function
returns false.
Fixes: d56354dc49091e33 ("perf tools: Save bpf_prog_info and BTF of new BPF programs")
Reviewed-by: Namhyung Kim <[email protected]>
Signed-off-by: Zhongqiu Han <[email protected]>
Cc: Adrian Hunter <[email protected]>
Cc: Alexander Shishkin <[email protected]>
Cc: Ian Rogers <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: James Clark <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Kan Liang <[email protected]>
Cc: Mark Rutland <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Song Liu <[email protected]>
Cc: Yicong Yang <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
Diffstat (limited to 'tools/perf/util/env.c')
| -rw-r--r-- | tools/perf/util/env.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/tools/perf/util/env.c b/tools/perf/util/env.c index 2c5285718465..919fe6f20593 100644 --- a/tools/perf/util/env.c +++ b/tools/perf/util/env.c @@ -24,12 +24,16 @@ struct perf_env perf_env; #include "bpf-utils.h" #include <bpf/libbpf.h> -void perf_env__insert_bpf_prog_info(struct perf_env *env, +bool perf_env__insert_bpf_prog_info(struct perf_env *env, struct bpf_prog_info_node *info_node) { + bool ret; + down_write(&env->bpf_progs.lock); - __perf_env__insert_bpf_prog_info(env, info_node); + ret = __perf_env__insert_bpf_prog_info(env, info_node); up_write(&env->bpf_progs.lock); + + return ret; } bool __perf_env__insert_bpf_prog_info(struct perf_env *env, struct bpf_prog_info_node *info_node) |
