summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorKan Liang <kan.liang@linux.intel.com>2018-03-26 09:42:09 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2018-05-30 08:17:27 +0200
commite8532355b2cf5e545afb43d6d5a77fb7ba191819 (patch)
treeb6a7e174fa38d31a9d7efdaa5622fc4a693db459 /tools
parent9d434e579b3c5402cbc0f80c3f669f1d002a0722 (diff)
perf mmap: Fix accessing unmapped mmap in perf_mmap__read_done()
[ Upstream commit f58385f629c87a9e210108b39c1f4950d0363ad2 ] There is a segmentation fault when running 'perf trace'. For example: [root@jouet e]# perf trace -e *chdir -o /tmp/bla perf report --ignore-vmlinux -i ../perf.data The perf_mmap__consume() could unmap the mmap. It needs to check the refcnt in perf_mmap__read_done(). Reported-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: Kan Liang <kan.liang@linux.intel.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Wang Nan <wangnan0@huawei.com> Fixes: ee023de05f35 ("perf mmap: Introduce perf_mmap__read_done()") Link: http://lkml.kernel.org/r/1522071729-16776-1-git-send-email-kan.liang@linux.intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'tools')
-rw-r--r--tools/perf/util/mmap.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c
index 91531a7c8fbf..0bda6dfd5b96 100644
--- a/tools/perf/util/mmap.c
+++ b/tools/perf/util/mmap.c
@@ -344,5 +344,11 @@ out:
*/
void perf_mmap__read_done(struct perf_mmap *map)
{
+ /*
+ * Check if event was unmapped due to a POLLHUP/POLLERR.
+ */
+ if (!refcount_read(&map->refcnt))
+ return;
+
map->prev = perf_mmap__read_head(map);
}