]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
perf evsel: Ensure the fallback message is always written to
authorIan Rogers <irogers@google.com>
Thu, 18 Sep 2025 17:24:15 +0000 (10:24 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 19 Oct 2025 14:33:37 +0000 (16:33 +0200)
[ Upstream commit 24937ee839e4bbc097acde73eeed67812bad2d99 ]

The fallback message is unconditionally printed in places like
record__open().

If no fallback is attempted this can lead to printing uninitialized
data, crashes, etc.

Fixes: c0a54341c0e89333 ("perf evsel: Introduce event fallback method")
Signed-off-by: Ian Rogers <irogers@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Howard Chu <howardchu95@gmail.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@linaro.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
tools/perf/util/evsel.c

index 70c4e06da7a03a0eef13a68df3146abe84a63d58..dda107b12b8c68efa691be88872b5af18628c924 100644 (file)
@@ -3237,7 +3237,7 @@ bool evsel__fallback(struct evsel *evsel, struct target *target, int err,
 
                /* If event has exclude user then don't exclude kernel. */
                if (evsel->core.attr.exclude_user)
-                       return false;
+                       goto no_fallback;
 
                /* Is there already the separator in the name. */
                if (strchr(name, '/') ||
@@ -3245,7 +3245,7 @@ bool evsel__fallback(struct evsel *evsel, struct target *target, int err,
                        sep = "";
 
                if (asprintf(&new_name, "%s%su", name, sep) < 0)
-                       return false;
+                       goto no_fallback;
 
                free(evsel->name);
                evsel->name = new_name;
@@ -3268,17 +3268,19 @@ bool evsel__fallback(struct evsel *evsel, struct target *target, int err,
                        sep = "";
 
                if (asprintf(&new_name, "%s%sH", name, sep) < 0)
-                       return false;
+                       goto no_fallback;
 
                free(evsel->name);
                evsel->name = new_name;
                /* Apple M1 requires exclude_guest */
-               scnprintf(msg, msgsize, "trying to fall back to excluding guest samples");
+               scnprintf(msg, msgsize, "Trying to fall back to excluding guest samples");
                evsel->core.attr.exclude_guest = 1;
 
                return true;
        }
-
+no_fallback:
+       scnprintf(msg, msgsize, "No fallback found for '%s' for error %d",
+                 evsel__name(evsel), err);
        return false;
 }