]> www.infradead.org Git - users/jedix/linux-maple.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)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 19 Sep 2025 19:52:24 +0000 (16:52 -0300)
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>
tools/perf/util/evsel.c

index 6947072598b1c51067651d2e708b871df59f76c4..1a29d4f47bbfa86e76ee60c35f79b058cf550df3 100644 (file)
@@ -3562,7 +3562,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, '/') ||
@@ -3570,7 +3570,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;
@@ -3593,17 +3593,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;
 }