]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
perf c2c: Fix use-after-free in he__get_c2c_hists() error path
authorArnaldo Carvalho de Melo <acme@redhat.com>
Sat, 6 Jun 2026 14:19:10 +0000 (11:19 -0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Sat, 6 Jun 2026 16:44:46 +0000 (13:44 -0300)
he__get_c2c_hists() assigns c2c_he->hists before calling
c2c_hists__init().  If init fails, the error path calls free(hists)
but leaves c2c_he->hists pointing to freed memory.  On teardown,
c2c_he_free() finds the non-NULL pointer and calls
hists__delete_entries() on it, causing a use-after-free.

Set c2c_he->hists to NULL before freeing so teardown skips the
already-freed allocation.

Fixes: b2252ae67b687d2b ("perf c2c report: Decode c2c_stats for hist entries")
Reported-by: sashiko-bot <sashiko-bot@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Assisted-by: Claude:claude-opus-4.6
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-c2c.c

index cfc1ebe8c0af74dc2a4c891170680480accda2fd..e205f58b2f3d3786076d0e5bee7cd32fcfd9febc 100644 (file)
@@ -225,6 +225,7 @@ he__get_c2c_hists(struct hist_entry *he,
 
        ret = c2c_hists__init(hists, sort, nr_header_lines, env);
        if (ret) {
+               c2c_he->hists = NULL;
                free(hists);
                return NULL;
        }