perf script: Fix segfault using --show-mmap-events
Adrian Hunter
reviewerPATCH 1/1 perf script: Fix segfault using --show-mmap-events
Patch "perf script: Don't assume evsel position of tracking events" changed 'perf script' to use 'perf_evlist__id2evsel()'. That results in a segfault if there is more than 1 event and there are synthesized mmap events e.g.
$ perf record -e cycles,instructions -p$$ sleep 1 $ perf script --show-mmap-events Segmentation fault (core dumped)
That happens because these synthesized events have an 'id' of zero which does not match any 'evsel'.
Currently, these synthesized events use the sample type of the first evsel.
Change 'perf_evlist__id2evsel()' to reflect that which also makes it consistent with 'perf_evlist__event2evsel()'.
--- tools/perf/util/evlist.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/util/evlist.c +1 -1
@@ -573,7 +573,7 @@ struct perf_evsel *perf_evlist__id2evsel(struct perf_evlist *evlist, u64 id) {struct perf_sample_id *sid; -if (evlist->nr_entries ==1 ) +if (evlist->nr_entries ==1 || !id)return perf_evlist__first (evlist); sid =perf_evlist__id2sid (evlist, id);
Signature · 1 line
1.9.1
Em Thu, Aug 20, 2015 at 11:26:45AM +0300, Adrian Hunter escreveu:
Quoted 8 lines
Patch "perf script: Don't assume evsel position of tracking events" changed 'perf script' to use '
perf_evlist__id2evsel()'. That results in a segfault if there is more than 1 event and there are synthesized mmap events e.g.$ perf record -e cycles,instructions -p$$ sleep 1 $ perf script --show-mmap-events Segmentation fault (core dumped)
Please next time tell what branch this affects, otherwise I'll have to try it on perf/urgent, notice that the problem is not there, then try it again on perf/core, where it is, to then apply...
Applied to perf/core.
Thanks,
- Arnaldo
Quoted 29 lines
That happens because these synthesized events have an 'id' of zero which does not match any 'evsel'.
Currently, these synthesized events use the sample type of the first evsel.
Change '
perf_evlist__id2evsel()' to reflect that which also makes it consistent with 'perf_evlist__event2evsel()'.Signed-off-by Adrian Hunter <[email protected]>--- tools/perf/util/evlist.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)tools/perf/util/evlist.c +1
-1@@ -573,7 +573,7 @@ struct perf_evsel *perf_evlist__id2evsel(struct perf_evlist *evlist, u64 id) {struct perf_sample_id *sid; -if (evlist->nr_entries ==1 ) +if (evlist->nr_entries ==1 || !id)return perf_evlist__first (evlist); sid =perf_evlist__id2sid (evlist, id);Signature · 1 line
1.9.1
tip-bot for Adrian Hunter
merge botperf script: Fix segfault using --show-mmap-events
Commit-ID: 05169df5561363ff04ac04d6aad0be3b45c26ac1 Gitweb: http://git.kernel.org/tip/05169df5561363ff04ac04d6aad0be3b45c26ac1 Author: Adrian Hunter <[email protected]> AuthorDate: Thu, 20 Aug 2015 11:26:45 +0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Fri, 21 Aug 2015 10:29:22 -0300
perf script: Fix segfault using --show-mmap-events
Patch "perf script: Don't assume evsel position of tracking events" changed 'perf script' to use 'perf_evlist__id2evsel()'. That results in a segfault if there is more than 1 event and there are synthesized mmap events e.g.
$ perf record -e cycles,instructions -p$$ sleep 1 $ perf script --show-mmap-events Segmentation fault (core dumped)
That happens because these synthesized events have an 'id' of zero which does not match any 'evsel'.
Currently, these synthesized events use the sample type of the first evsel.
Change 'perf_evlist__id2evsel()' to reflect that which also makes it consistent with 'perf_evlist__event2evsel()'.
--- tools/perf/util/evlist.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/util/evlist.c +1 -1
@@ -573,7 +573,7 @@ struct perf_evsel *perf_evlist__id2evsel(struct perf_evlist *evlist, u64 id) {struct perf_sample_id *sid; -if (evlist->nr_entries ==1 ) +if (evlist->nr_entries ==1 || !id)return perf_evlist__first (evlist); sid =perf_evlist__id2sid (evlist, id);