* [PATCH] perf record: Fix a segfault in record__read_lost_samples()
@ 2022-09-09 23:50 Namhyung Kim
0 siblings, 0 replies; only message in thread
From: Namhyung Kim @ 2022-09-09 23:50 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo, Jiri Olsa
Cc: Ingo Molnar, Peter Zijlstra, LKML, Ian Rogers, Adrian Hunter,
linux-perf-users, Stephane Eranian
When it fails to open events record__open() returns without setting the
session->evlist. Then it gets a segfault in the function trying to read
lost sample counts. You can easily reproduce it as a normal user like:
$ perf record -p 1 true
...
perf: Segmentation fault
...
Skip the function if it has no evlist. And add more protection for evsels
which are not properly initialized.
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
I didn't add a Fixes tag as it's not sent to Linus yet.
But in case you want it.
Fixes: a49aa8a54e86 ("perf record: Read and inject LOST_SAMPLES events")
tools/perf/builtin-record.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index 9df77b81a3bb..fe34d5db23bd 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -1888,6 +1888,10 @@ static void record__read_lost_samples(struct record *rec)
struct perf_record_lost_samples *lost;
struct evsel *evsel;
+ /* there was an error during record__open */
+ if (session->evlist == NULL)
+ return;
+
lost = zalloc(PERF_SAMPLE_MAX_SIZE);
if (lost == NULL) {
pr_debug("Memory allocation failed\n");
@@ -1899,6 +1903,8 @@ static void record__read_lost_samples(struct record *rec)
evlist__for_each_entry(session->evlist, evsel) {
struct xyarray *xy = evsel->core.sample_id;
+ if (xy == NULL || evsel->core.fd == NULL)
+ continue;
if (xyarray__max_x(evsel->core.fd) != xyarray__max_x(xy) ||
xyarray__max_y(evsel->core.fd) != xyarray__max_y(xy)) {
pr_debug("Unmatched FD vs. sample ID: skip reading LOST count\n");
--
2.37.2.789.g6183377224-goog
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2022-09-09 23:50 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-09-09 23:50 [PATCH] perf record: Fix a segfault in record__read_lost_samples() Namhyung Kim
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).