perf tools: Fix crash on synthesizing the unit
Jiri Olsa
reviewerPATCH 1/1 perf tools: Fix crash on synthesizing the unit
Adam reported a record command crash for simple session like:
$ perf record -e cpu-clock ls
with following backtrace:
Program received signal SIGSEGV, Segmentation fault.
3543 ev = event_update_event__new(size + 1, PERF_EVENT_UPDATE__UNIT, evsel->id[0]);
(gdb) bt
#0 perf_event__synthesize_event_update_unit #1 0x000000000051e469 in perf_event__synthesize_extra_attr #2 0x00000000004445cb in record__synthesize #3 0x0000000000444bc5 in __cmd_record
...
We synthesize an update event that needs to touch the evsel id array, which is not defined at that time. Fixing this by forcing the id allocation for events with their unit defined.
Reflecting possible read_format ID bit in the attr tests.
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=201477
--- tools/perf/tests/attr/base-record | 2 +- tools/perf/util/evsel.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
tools/perf/tests/attr/base-record +1 -1
@@ -9,7 +9,7 @@ size=112 config=0 sample_period=* sample_type=263 -read_format=0 +read_format=0|4 disabled=1 inherit=1 pinned=0
tools/perf/util/evsel.c +1 -1
@@ -1092,7 +1092,7 @@ void perf_evsel__config(struct perf_evsel *evsel, struct record_opts *opts, attr->exclude_user =1 ; } -if (evsel->own_cpus) +if (evsel->own_cpus || evsel->unit) evsel->attr.read_format |=PERF_FORMAT_ID ;/*
Signature · 1 line
2.17.2
Arnaldo Carvalho de Melo
maintainerEm Mon, Nov 12, 2018 at 02:00:12PM +0100, Jiri Olsa escreveu:
Quoted 2 lines
Adam reported a record command crash for simple session like:
$ perf record -e cpu-clock ls
Thanks, tested, confirmed it fixes the problem, applied.
- Arnaldo
Quoted 56 lines
with following backtrace:
Program received signal SIGSEGV, Segmentation fault.
3543 ev =event_update_event__new(size + 1, PERF_EVENT_UPDATE__UNIT, evsel->id[0]);
(gdb) bt#0 perf_event__synthesize_event_update_unit #1 0x000000000051e469 in perf_event__synthesize_extra_attr #2 0x00000000004445cb in record__synthesize #3 0x0000000000444bc5 in __cmd_record...
We synthesize an update event that needs to touch the evsel id array, which is not defined at that time. Fixing this by forcing the id allocation for events with their unit defined.
Reflecting possible
read_formatID bit in the attr tests.Cc Adam Lee <[email protected]>Reported-by Yongxin Liu <[email protected]>Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=201477
Fixes bfd8f72c2778 ("perf record: Synthesize unit/scale/... in event update")Signed-off-by Jiri Olsa <[email protected]>--- tools/perf/tests/attr/base-record | 2 +- tools/perf/util/evsel.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)tools/perf/tests/attr/base-record +1
-1@@ -9,7 +9,7 @@ size=112 config=0 sample_period=* sample_type=263 -read_format=0 +read_format=0|4 disabled=1 inherit=1 pinned=0tools/perf/util/evsel.c +1
-1@@ -1092,7 +1092,7 @@ void perf_evsel__config(struct perf_evsel *evsel, struct record_opts *opts, attr->exclude_user =1 ; } -if (evsel->own_cpus) +if (evsel->own_cpus || evsel->unit) evsel->attr.read_format |=PERF_FORMAT_ID ;/* Signature · 1 line
2.17.2
tip-bot for Jiri Olsa
merge botperf tools: Fix crash on synthesizing the unit
Commit-ID: fb50c09e923870a358d68b0d58891bd145b8d7c7 Gitweb: https://git.kernel.org/tip/fb50c09e923870a358d68b0d58891bd145b8d7c7 Author: Jiri Olsa <[email protected]> AuthorDate: Mon, 12 Nov 2018 14:00:12 +0100 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Mon, 12 Nov 2018 08:37:49 -0800
perf tools: Fix crash on synthesizing the unit
Adam reported a record command crash for simple session like:
$ perf record -e cpu-clock ls
with following backtrace:
Program received signal SIGSEGV, Segmentation fault.
3543 ev = event_update_event__new(size + 1, PERF_EVENT_UPDATE__UNIT, evsel->id[0]);
(gdb) bt
#0 perf_event__synthesize_event_update_unit #1 0x000000000051e469 in perf_event__synthesize_extra_attr #2 0x00000000004445cb in record__synthesize #3 0x0000000000444bc5 in __cmd_record
...
We synthesize an update event that needs to touch the evsel id array, which is not defined at that time. Fix this by forcing the id allocation for events with their unit defined.
Reflecting possible read_format ID bit in the attr tests.
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=201477
--- tools/perf/tests/attr/base-record | 2 +- tools/perf/util/evsel.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
tools/perf/tests/attr/base-record +1 -1
@@ -9,7 +9,7 @@ size=112 config=0 sample_period=* sample_type=263 -read_format=0 +read_format=0|4 disabled=1 inherit=1 pinned=0
tools/perf/util/evsel.c +1 -1
@@ -1092,7 +1092,7 @@ void perf_evsel__config(struct perf_evsel *evsel, struct record_opts *opts, attr->exclude_user =1 ; } -if (evsel->own_cpus) +if (evsel->own_cpus || evsel->unit) evsel->attr.read_format |=PERF_FORMAT_ID ;/*