4.17-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ravi Bangoria ravi.bangoria@linux.ibm.com
[ Upstream commit a3af66f51bd0bca72881ead4bf2bd19cb366582b ]
'perf script' in piped mode is crashing because evsel->priv is not set properly. Fix it.
Before:
# perf record -o - -- ls | perf script <SNIP 'ls' output> Segmentation fault (core dumped) #
After:
# perf record -o - -- ls | perf script <SNIP 'ls' output> ls 2282 1031.731974: 250000 cpu-clock:uhH: 7effe4b3d29e ls 2282 1031.732222: 250000 cpu-clock:uhH: 7effe4b3a650 #
Signed-off-by: Ravi Bangoria ravi.bangoria@linux.ibm.com Tested-by: Arnaldo Carvalho de Melo acme@redhat.com Cc: Alexander Shishkin alexander.shishkin@linux.intel.com Cc: Andi Kleen ak@linux.intel.com Cc: David Ahern dsahern@gmail.com Cc: David Carrillo-Cisneros davidcc@google.com Cc: Jin Yao yao.jin@linux.intel.com Cc: Jiri Olsa jolsa@redhat.com Cc: Namhyung Kim namhyung@kernel.org Fixes: a14390fde64e ("perf script: Allow creating per-event dump files") Link: http://lkml.kernel.org/r/20180625124220.6434-3-ravi.bangoria@linux.ibm.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 --- tools/perf/builtin-script.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+)
--- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -1832,6 +1832,7 @@ static int process_attr(struct perf_tool struct perf_evlist *evlist; struct perf_evsel *evsel, *pos; int err; + static struct perf_evsel_script *es;
err = perf_event__process_attr(tool, event, pevlist); if (err) @@ -1840,6 +1841,19 @@ static int process_attr(struct perf_tool evlist = *pevlist; evsel = perf_evlist__last(*pevlist);
+ if (!evsel->priv) { + if (scr->per_event_dump) { + evsel->priv = perf_evsel_script__new(evsel, + scr->session->data); + } else { + es = zalloc(sizeof(*es)); + if (!es) + return -ENOMEM; + es->fp = stdout; + evsel->priv = es; + } + } + if (evsel->attr.type >= PERF_TYPE_MAX && evsel->attr.type != PERF_TYPE_SYNTH) return 0;