]> www.infradead.org Git - users/willy/xarray.git/commitdiff
tools: Free BTF objects at various locations
authorQuentin Monnet <quentin@isovalent.com>
Thu, 29 Jul 2021 16:20:24 +0000 (17:20 +0100)
committerAndrii Nakryiko <andrii@kernel.org>
Fri, 30 Jul 2021 00:09:28 +0000 (17:09 -0700)
Make sure to call btf__free() (and not simply free(), which does not
free all pointers stored in the struct) on pointers to struct btf
objects retrieved at various locations.

These were found while updating the calls to btf__get_from_id().

Fixes: 999d82cbc044 ("tools/bpf: enhance test_btf file testing to test func info")
Fixes: 254471e57a86 ("tools/bpf: bpftool: add support for func types")
Fixes: 7b612e291a5a ("perf tools: Synthesize PERF_RECORD_* for loaded BPF programs")
Fixes: d56354dc4909 ("perf tools: Save bpf_prog_info and BTF of new BPF programs")
Fixes: 47c09d6a9f67 ("bpftool: Introduce "prog profile" command")
Fixes: fa853c4b839e ("perf stat: Enable counting events for BPF programs")
Signed-off-by: Quentin Monnet <quentin@isovalent.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20210729162028.29512-5-quentin@isovalent.com
tools/bpf/bpftool/prog.c
tools/perf/util/bpf-event.c
tools/perf/util/bpf_counter.c
tools/testing/selftests/bpf/prog_tests/btf.c

index cc48726740ade023fb52303636d285bceea2928a..9d709b427665586e8edf6cdb2ddc2dda7b1f785b 100644 (file)
@@ -781,6 +781,8 @@ prog_dump(struct bpf_prog_info *info, enum dump_mode mode,
                kernel_syms_destroy(&dd);
        }
 
+       btf__free(btf);
+
        return 0;
 }
 
@@ -2002,8 +2004,8 @@ static char *profile_target_name(int tgt_fd)
        struct bpf_prog_info_linear *info_linear;
        struct bpf_func_info *func_info;
        const struct btf_type *t;
+       struct btf *btf = NULL;
        char *name = NULL;
-       struct btf *btf;
 
        info_linear = bpf_program__get_prog_info_linear(
                tgt_fd, 1UL << BPF_PROG_INFO_FUNC_INFO);
@@ -2027,6 +2029,7 @@ static char *profile_target_name(int tgt_fd)
        }
        name = strdup(btf__name_by_offset(btf, t->name_off));
 out:
+       btf__free(btf);
        free(info_linear);
        return name;
 }
index cdecda1ddd36e29eb5d04fbdf8c4bf2fa9c6b393..17a9844e4fbf80aac4a127af362bcc72e0ba3384 100644 (file)
@@ -296,7 +296,7 @@ static int perf_event__synthesize_one_bpf_prog(struct perf_session *session,
 
 out:
        free(info_linear);
-       free(btf);
+       btf__free(btf);
        return err ? -1 : 0;
 }
 
@@ -486,7 +486,7 @@ static void perf_env__add_bpf_info(struct perf_env *env, u32 id)
        perf_env__fetch_btf(env, btf_id, btf);
 
 out:
-       free(btf);
+       btf__free(btf);
        close(fd);
 }
 
index 8150e03367bbafad19d28f231ec9567f7c707f79..beca55129b0b27ad60e8bf26fe2a077355c5576a 100644 (file)
@@ -64,8 +64,8 @@ static char *bpf_target_prog_name(int tgt_fd)
        struct bpf_prog_info_linear *info_linear;
        struct bpf_func_info *func_info;
        const struct btf_type *t;
+       struct btf *btf = NULL;
        char *name = NULL;
-       struct btf *btf;
 
        info_linear = bpf_program__get_prog_info_linear(
                tgt_fd, 1UL << BPF_PROG_INFO_FUNC_INFO);
@@ -89,6 +89,7 @@ static char *bpf_target_prog_name(int tgt_fd)
        }
        name = strdup(btf__name_by_offset(btf, t->name_off));
 out:
+       btf__free(btf);
        free(info_linear);
        return name;
 }
index 857e3f26086fec35226557eae3fe4307d1ab1422..68e415f4d33cd265b7d48c7f4cf9a98b54f5149e 100644 (file)
@@ -4386,6 +4386,7 @@ skip:
        fprintf(stderr, "OK");
 
 done:
+       btf__free(btf);
        free(func_info);
        bpf_object__close(obj);
 }