]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
perf bpf: Fix metadata leak in perf_env__add_bpf_info() on duplicate insert
authorArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 8 Jun 2026 11:12:04 +0000 (08:12 -0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 10 Jun 2026 21:56:02 +0000 (18:56 -0300)
When perf_env__insert_bpf_prog_info() returns false (duplicate
program), the error path frees info_linear and info_node but not
info_node->metadata.  If bpf_metadata_create() had succeeded, the
metadata allocation is permanently leaked.

Fix by calling bpf_metadata_free() on info_node->metadata before
freeing info_node.  bpf_metadata_free() handles NULL, so this is
safe even when bpf_metadata_create() returned NULL.

Reported-by: sashiko-bot <sashiko-bot@kernel.org>
Fixes: fdc3441f2d317b40 ("perf record: collect BPF metadata from new programs")
Cc: Blake Jones <blakejones@google.com>
Assisted-by: Claude:claude-opus-4.6
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/bpf-event.c

index b65ad28cd950fc644799020d30ab4e08848bed39..c4594969d76772388f441f323ed93496137fc2e5 100644 (file)
@@ -873,6 +873,7 @@ static int perf_env__add_bpf_info(struct perf_env *env, u32 id)
                if (!perf_env__insert_bpf_prog_info(env, info_node)) {
                        pr_debug("%s: duplicate add bpf info request for id %u\n",
                                 __func__, btf_id);
+                       bpf_metadata_free(info_node->metadata);
                        free(info_linear);
                        free(info_node);
                        goto out;