]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
perf bpf: Fix map data leak in bpf_metadata_create() on alloc failure
authorArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 8 Jun 2026 11:11:28 +0000 (08:11 -0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 10 Jun 2026 21:56:02 +0000 (18:56 -0300)
bpf_metadata_create() calls bpf_metadata_read_map_data() which
allocates map.btf and map.rodata.  If the subsequent
bpf_metadata_alloc() fails, the code does 'continue' which skips
bpf_metadata_free_map_data(), permanently leaking both allocations.

Fix by calling bpf_metadata_free_map_data() before continue.

Reported-by: sashiko-bot <sashiko-bot@kernel.org>
Fixes: ab38e84ba9a80581 ("perf record: collect BPF metadata from existing BPF 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 fe01551dc3e6cc297578af9f579549119ae655ea..b65ad28cd950fc644799020d30ab4e08848bed39 100644 (file)
@@ -395,8 +395,10 @@ static struct bpf_metadata *bpf_metadata_create(struct bpf_prog_info *info)
                        continue;
 
                metadata = bpf_metadata_alloc(info->nr_prog_tags, map.num_vars);
-               if (!metadata)
+               if (!metadata) {
+                       bpf_metadata_free_map_data(&map);
                        continue;
+               }
 
                bpf_metadata_fill_event(&map, &metadata->event->bpf_metadata);