Home Home > GIT Browse > stable
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiri Slaby <jslaby@suse.cz>2019-08-16 22:01:45 +0200
committerJiri Slaby <jslaby@suse.cz>2019-08-16 22:25:10 +0200
commitada1ef75155e483e03d76c2f44ba133eb23d703c (patch)
treef9b1f260cdb6339583ab7459e246a27f4531dc40
parenta7f0a80ffdd03d015e8e1ca1fa1077aa4c8a5f1c (diff)
perf stat: Fix segfault for event group in repeat mode
-rw-r--r--patches.kernel.org/5.2.9-098-perf-stat-Fix-segfault-for-event-group-in-repea.patch93
-rw-r--r--series.conf1
2 files changed, 94 insertions, 0 deletions
diff --git a/patches.kernel.org/5.2.9-098-perf-stat-Fix-segfault-for-event-group-in-repea.patch b/patches.kernel.org/5.2.9-098-perf-stat-Fix-segfault-for-event-group-in-repea.patch
new file mode 100644
index 0000000000..60f9206c53
--- /dev/null
+++ b/patches.kernel.org/5.2.9-098-perf-stat-Fix-segfault-for-event-group-in-repea.patch
@@ -0,0 +1,93 @@
+From: Jiri Olsa <jolsa@redhat.com>
+Date: Mon, 15 Jul 2019 16:21:21 +0200
+Subject: [PATCH] perf stat: Fix segfault for event group in repeat mode
+References: bnc#1012628
+Patch-mainline: 5.2.9
+Git-commit: 08ef3af1579d0446db1c1bd08e2c42565addf10f
+
+[ Upstream commit 08ef3af1579d0446db1c1bd08e2c42565addf10f ]
+
+Numfor Mbiziwo-Tiapo reported segfault on stat of event group in repeat
+mode:
+
+ # perf stat -e '{cycles,instructions}' -r 10 ls
+
+It's caused by memory corruption due to not cleaned evsel's id array and
+index, which needs to be rebuilt in every stat iteration. Currently the
+ids index grows, while the array (which is also not freed) has the same
+size.
+
+Fixing this by releasing id array and zeroing ids index in
+perf_evsel__close function.
+
+We also need to keep the evsel_list alive for stat record (which is
+disabled in repeat mode).
+
+Reported-by: Numfor Mbiziwo-Tiapo <nums@google.com>
+Signed-off-by: Jiri Olsa <jolsa@kernel.org>
+Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
+Cc: Ian Rogers <irogers@google.com>
+Cc: Mark Drayton <mbd@fb.com>
+Cc: Namhyung Kim <namhyung@kernel.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Song Liu <songliubraving@fb.com>
+Cc: Stephane Eranian <eranian@google.com>
+Link: http://lkml.kernel.org/r/20190715142121.GC6032@krava
+Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+Signed-off-by: Jiri Slaby <jslaby@suse.cz>
+---
+ tools/perf/builtin-stat.c | 9 ++++++++-
+ tools/perf/util/evsel.c | 2 ++
+ 2 files changed, 10 insertions(+), 1 deletion(-)
+
+diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
+index e28002d90573..c6c550dbb947 100644
+--- a/tools/perf/builtin-stat.c
++++ b/tools/perf/builtin-stat.c
+@@ -607,7 +607,13 @@ static int __run_perf_stat(int argc, const char **argv, int run_idx)
+ * group leaders.
+ */
+ read_counters(&(struct timespec) { .tv_nsec = t1-t0 });
+- perf_evlist__close(evsel_list);
++
++ /*
++ * We need to keep evsel_list alive, because it's processed
++ * later the evsel_list will be closed after.
++ */
++ if (!STAT_RECORD)
++ perf_evlist__close(evsel_list);
+
+ return WEXITSTATUS(status);
+ }
+@@ -1922,6 +1928,7 @@ int cmd_stat(int argc, const char **argv)
+ perf_session__write_header(perf_stat.session, evsel_list, fd, true);
+ }
+
++ perf_evlist__close(evsel_list);
+ perf_session__delete(perf_stat.session);
+ }
+
+diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
+index 2c46f9aa416c..b854541604df 100644
+--- a/tools/perf/util/evsel.c
++++ b/tools/perf/util/evsel.c
+@@ -1282,6 +1282,7 @@ static void perf_evsel__free_id(struct perf_evsel *evsel)
+ xyarray__delete(evsel->sample_id);
+ evsel->sample_id = NULL;
+ zfree(&evsel->id);
++ evsel->ids = 0;
+ }
+
+ static void perf_evsel__free_config_terms(struct perf_evsel *evsel)
+@@ -2074,6 +2075,7 @@ void perf_evsel__close(struct perf_evsel *evsel)
+
+ perf_evsel__close_fd(evsel);
+ perf_evsel__free_fd(evsel);
++ perf_evsel__free_id(evsel);
+ }
+
+ int perf_evsel__open_per_cpu(struct perf_evsel *evsel,
+--
+2.22.0
+
diff --git a/series.conf b/series.conf
index e8f0a3caec..7b3a9cce27 100644
--- a/series.conf
+++ b/series.conf
@@ -1118,6 +1118,7 @@
patches.kernel.org/5.2.9-095-ALSA-compress-Be-more-restrictive-about-when-a-.patch
patches.kernel.org/5.2.9-096-perf-script-Fix-off-by-one-in-brstackinsn-IPC-c.patch
patches.kernel.org/5.2.9-097-perf-tools-Fix-proper-buffer-size-for-feature-p.patch
+ patches.kernel.org/5.2.9-098-perf-stat-Fix-segfault-for-event-group-in-repea.patch
########################################################
# Build fixes that apply to the vanilla kernel too.