* perf list dumps core using 5.13.0.rc2 @ 2021-05-19 14:57 Thomas Richter 2021-05-19 16:26 ` Arnaldo Carvalho de Melo 2021-05-19 16:27 ` Ian Rogers 0 siblings, 2 replies; 6+ messages in thread From: Thomas Richter @ 2021-05-19 14:57 UTC (permalink / raw) To: Arnaldo Carvalho de Melo, sumanth Korikkar, Heiko Carstens, linux-perf-use. Using kernel 5.13.0.rc2 command perf list dumps core on my x86 virtual machine: [root@f34 perf]# ./perf list Segmentation fault (core dumped) ^C [root@f34 perf]# The root case this this change in file ../include/uapi/linux/perf_event.h: enum perf_sw_ids { PERF_COUNT_SW_CPU_CLOCK = 0, ... ---> PERF_COUNT_SW_CGROUP_SWITCHES = 11, PERF_COUNT_SW_MAX, /* non-ABI */ }; This change increases PERF_COUNT_SW_MAX to 12. However this change is not reflected in file util/parse-events.c where data structure struct event_symbol event_symbols_sw[PERF_COUNT_SW_MAX] = { .... } is defined and it misses the symbol name and alias for this new software event. So when command 'perf list' is called, the call chain sequence is cmd_list() print_events() print_symbol_events(event_glob, PERF_TYPE_SOFTWARE, event_symbols_sw, PERF_COUNT_SW_MAX, name_only); where PERF_COUNT_SW_MAX is 12 and structure event_symbols_sw[] contains only 11 elements. This ends up with the last element of the array being all zeroes and the line: if (!name_only && strlen(syms->alias)) dumps core because syms->alias is a NULL pointer. Is this dummy event PERF_COUNT_SW_CGROUP_SWITCHES simply missing in the event_symbols_sw[] array or is there more to it (which I am missing). Thanks. PS: I can sent a patch if needed.... -- Thomas Richter, Dept 3303, IBM s390 Linux Development, Boeblingen, Germany -- Vorsitzender des Aufsichtsrats: Gregor Pillen Geschäftsführung: Dirk Wittkopp Sitz der Gesellschaft: Böblingen / Registergericht: Amtsgericht Stuttgart, HRB 243294 ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: perf list dumps core using 5.13.0.rc2 2021-05-19 14:57 perf list dumps core using 5.13.0.rc2 Thomas Richter @ 2021-05-19 16:26 ` Arnaldo Carvalho de Melo 2021-05-19 17:00 ` Arnaldo Carvalho de Melo 2021-05-19 16:27 ` Ian Rogers 1 sibling, 1 reply; 6+ messages in thread From: Arnaldo Carvalho de Melo @ 2021-05-19 16:26 UTC (permalink / raw) To: Thomas Richter, Namhyung Kim Cc: sumanth Korikkar, Jiri Olsa, Heiko Carstens, linux-perf-use. Em Wed, May 19, 2021 at 04:57:05PM +0200, Thomas Richter escreveu: > Using kernel 5.13.0.rc2 command perf list dumps core on my x86 > virtual machine: > > [root@f34 perf]# ./perf list > Segmentation fault (core dumped) > ^C > [root@f34 perf]# > > The root case this this change in file ../include/uapi/linux/perf_event.h: > enum perf_sw_ids { > PERF_COUNT_SW_CPU_CLOCK = 0, > ... > ---> PERF_COUNT_SW_CGROUP_SWITCHES = 11, > > PERF_COUNT_SW_MAX, /* non-ABI */ > }; > > This change increases PERF_COUNT_SW_MAX to 12. However this > change is not reflected in file util/parse-events.c where data structure > > struct event_symbol event_symbols_sw[PERF_COUNT_SW_MAX] = { > .... > } > > is defined and it misses the symbol name and alias for this new software Sure, it is not there, but then PERF_COUNT_SW_MAX is used in the array definition, so it ends up having event_symbols_sw[PERF_COUNT_SW_MAX].symbol == NULL > event. So when command 'perf list' is called, the call chain sequence > is > cmd_list() > print_events() > print_symbol_events(event_glob, PERF_TYPE_SOFTWARE, > event_symbols_sw, PERF_COUNT_SW_MAX, name_only); > > where PERF_COUNT_SW_MAX is 12 and structure event_symbols_sw[] contains > only 11 elements. This ends up with the last element of the array being > all zeroes and the line: > > if (!name_only && strlen(syms->alias)) But before this we have: if (event_glob != NULL && syms->symbol != NULL && !(strglobmatch(syms->symbol, event_glob) || (syms->alias && strglobmatch(syms->alias, event_glob)))) continue; We need to move that syms->symbol != NULL part to be the first one and continue if that array entry isn't populated, I'll add a patch with your Reported-by: I was scratching my head looking why I hadn't hit this, it doesn't support PERF_COUNT_SW_CGROUP_SWITCHES so it bails out at !is_event_supported(type, i): for (i = 0; i < max; i++, syms++) { if (event_glob != NULL && syms->symbol != NULL && !(strglobmatch(syms->symbol, event_glob) || (syms->alias && strglobmatch(syms->alias, event_glob)))) continue; if (!is_event_supported(type, i)) continue; if (!evt_num_known) { evt_num++; continue; } if (!name_only && strlen(syms->alias)) > > dumps core because syms->alias is a NULL pointer. > > Is this dummy event PERF_COUNT_SW_CGROUP_SWITCHES simply missing in the > event_symbols_sw[] array or is there more to it (which I am missing). > > Thanks. > > PS: I can sent a patch if needed.... > > -- > Thomas Richter, Dept 3303, IBM s390 Linux Development, Boeblingen, Germany > -- > Vorsitzender des Aufsichtsrats: Gregor Pillen > Geschäftsführung: Dirk Wittkopp > Sitz der Gesellschaft: Böblingen / Registergericht: Amtsgericht Stuttgart, HRB 243294 -- - Arnaldo ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: perf list dumps core using 5.13.0.rc2 2021-05-19 16:26 ` Arnaldo Carvalho de Melo @ 2021-05-19 17:00 ` Arnaldo Carvalho de Melo 0 siblings, 0 replies; 6+ messages in thread From: Arnaldo Carvalho de Melo @ 2021-05-19 17:00 UTC (permalink / raw) To: Thomas Richter, Namhyung Kim Cc: sumanth Korikkar, Jiri Olsa, Heiko Carstens, linux-perf-use. Em Wed, May 19, 2021 at 01:26:23PM -0300, Arnaldo Carvalho de Melo escreveu: > Em Wed, May 19, 2021 at 04:57:05PM +0200, Thomas Richter escreveu: > > Using kernel 5.13.0.rc2 command perf list dumps core on my x86 > > virtual machine: > > > > [root@f34 perf]# ./perf list > > Segmentation fault (core dumped) > > ^C > > [root@f34 perf]# > > > > The root case this this change in file ../include/uapi/linux/perf_event.h: > > enum perf_sw_ids { > > PERF_COUNT_SW_CPU_CLOCK = 0, > > ... > > ---> PERF_COUNT_SW_CGROUP_SWITCHES = 11, > > > > PERF_COUNT_SW_MAX, /* non-ABI */ > > }; > > > > This change increases PERF_COUNT_SW_MAX to 12. However this > > change is not reflected in file util/parse-events.c where data structure > > > > struct event_symbol event_symbols_sw[PERF_COUNT_SW_MAX] = { > > .... > > } > > > > is defined and it misses the symbol name and alias for this new software Please check and provide your Acked-by or Reviewed-by, Thanks, - Arnaldo From f8b0fe090267a901aa30070351b40f5e8abc0286 Mon Sep 17 00:00:00 2001 From: Arnaldo Carvalho de Melo <acme@redhat.com> Date: Wed, 19 May 2021 13:50:31 -0300 Subject: [PATCH 1/1] perf parse-events: Check if the software events array slots are populated To avoid a NULL pointer dereference when the kernel supports the new entry but the tooling still hasn't added an entry for it. This happened with the recently added PERF_COUNT_SW_CGROUP_SWITCHES software event. Reported-by: Thomas Richter <tmricht@linux.ibm.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Heiko Carstens <hca@linux.ibm.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Sumanth Korikkar <sumanthk@linux.ibm.com> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/perf/util/parse-events.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 4dad14265b81dfb8..8c5df56121d85cb2 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -2928,9 +2928,14 @@ void print_symbol_events(const char *event_glob, unsigned type, } for (i = 0; i < max; i++, syms++) { + /* + * New attr.config still not supported here, the latest + * example was PERF_COUNT_SW_CGROUP_SWITCHES + */ + if (syms->symbol == NULL) + continue; - if (event_glob != NULL && syms->symbol != NULL && - !(strglobmatch(syms->symbol, event_glob) || + if (event_glob != NULL && !(strglobmatch(syms->symbol, event_glob) || (syms->alias && strglobmatch(syms->alias, event_glob)))) continue; -- 2.31.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: perf list dumps core using 5.13.0.rc2 2021-05-19 14:57 perf list dumps core using 5.13.0.rc2 Thomas Richter 2021-05-19 16:26 ` Arnaldo Carvalho de Melo @ 2021-05-19 16:27 ` Ian Rogers 2021-05-19 17:18 ` Arnaldo Carvalho de Melo 1 sibling, 1 reply; 6+ messages in thread From: Ian Rogers @ 2021-05-19 16:27 UTC (permalink / raw) To: Thomas Richter Cc: Arnaldo Carvalho de Melo, sumanth Korikkar, Heiko Carstens, linux-perf-use., Namhyung Kim On Wed, May 19, 2021 at 7:57 AM Thomas Richter <tmricht@linux.ibm.com> wrote: > > Using kernel 5.13.0.rc2 command perf list dumps core on my x86 > virtual machine: > > [root@f34 perf]# ./perf list > Segmentation fault (core dumped) > ^C > [root@f34 perf]# > > The root case this this change in file ../include/uapi/linux/perf_event.h: > enum perf_sw_ids { > PERF_COUNT_SW_CPU_CLOCK = 0, > ... > ---> PERF_COUNT_SW_CGROUP_SWITCHES = 11, > > PERF_COUNT_SW_MAX, /* non-ABI */ > }; > > This change increases PERF_COUNT_SW_MAX to 12. However this > change is not reflected in file util/parse-events.c where data structure > > struct event_symbol event_symbols_sw[PERF_COUNT_SW_MAX] = { > .... > } > > is defined and it misses the symbol name and alias for this new software > event. So when command 'perf list' is called, the call chain sequence > is > cmd_list() > print_events() > print_symbol_events(event_glob, PERF_TYPE_SOFTWARE, > event_symbols_sw, PERF_COUNT_SW_MAX, name_only); > > where PERF_COUNT_SW_MAX is 12 and structure event_symbols_sw[] contains > only 11 elements. This ends up with the last element of the array being > all zeroes and the line: > > if (!name_only && strlen(syms->alias)) > > dumps core because syms->alias is a NULL pointer. > > Is this dummy event PERF_COUNT_SW_CGROUP_SWITCHES simply missing in the > event_symbols_sw[] array or is there more to it (which I am missing). > > Thanks. > > PS: I can sent a patch if needed.... I believe Namhyung's pending change will fix this: https://lore.kernel.org/lkml/20210210083327.22726-3-namhyung@kernel.org/ Thanks, Ian > -- > Thomas Richter, Dept 3303, IBM s390 Linux Development, Boeblingen, Germany > -- > Vorsitzender des Aufsichtsrats: Gregor Pillen > Geschäftsführung: Dirk Wittkopp > Sitz der Gesellschaft: Böblingen / Registergericht: Amtsgericht Stuttgart, HRB 243294 ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: perf list dumps core using 5.13.0.rc2 2021-05-19 16:27 ` Ian Rogers @ 2021-05-19 17:18 ` Arnaldo Carvalho de Melo 2021-05-20 6:35 ` Thomas Richter 0 siblings, 1 reply; 6+ messages in thread From: Arnaldo Carvalho de Melo @ 2021-05-19 17:18 UTC (permalink / raw) To: Ian Rogers Cc: Thomas Richter, sumanth Korikkar, Heiko Carstens, linux-perf-use., Namhyung Kim Em Wed, May 19, 2021 at 09:27:14AM -0700, Ian Rogers escreveu: > On Wed, May 19, 2021 at 7:57 AM Thomas Richter <tmricht@linux.ibm.com> wrote: > > > > Using kernel 5.13.0.rc2 command perf list dumps core on my x86 > > virtual machine: > > > > [root@f34 perf]# ./perf list > > Segmentation fault (core dumped) > > ^C > > [root@f34 perf]# > > > > The root case this this change in file ../include/uapi/linux/perf_event.h: > > enum perf_sw_ids { > > PERF_COUNT_SW_CPU_CLOCK = 0, > > ... > > ---> PERF_COUNT_SW_CGROUP_SWITCHES = 11, > > > > PERF_COUNT_SW_MAX, /* non-ABI */ > > }; > > > > This change increases PERF_COUNT_SW_MAX to 12. However this > > change is not reflected in file util/parse-events.c where data structure > > > > struct event_symbol event_symbols_sw[PERF_COUNT_SW_MAX] = { > > .... > > } > > > > is defined and it misses the symbol name and alias for this new software > > event. So when command 'perf list' is called, the call chain sequence > > is > > cmd_list() > > print_events() > > print_symbol_events(event_glob, PERF_TYPE_SOFTWARE, > > event_symbols_sw, PERF_COUNT_SW_MAX, name_only); > > > > where PERF_COUNT_SW_MAX is 12 and structure event_symbols_sw[] contains > > only 11 elements. This ends up with the last element of the array being > > all zeroes and the line: > > > > if (!name_only && strlen(syms->alias)) > > > > dumps core because syms->alias is a NULL pointer. > > > > Is this dummy event PERF_COUNT_SW_CGROUP_SWITCHES simply missing in the > > event_symbols_sw[] array or is there more to it (which I am missing). > > > > Thanks. > > > > PS: I can sent a patch if needed.... > > I believe Namhyung's pending change will fix this: > https://lore.kernel.org/lkml/20210210083327.22726-3-namhyung@kernel.org/ Ok, I'll pick that one instead of the one I did, similar one. - Arnaldo ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: perf list dumps core using 5.13.0.rc2 2021-05-19 17:18 ` Arnaldo Carvalho de Melo @ 2021-05-20 6:35 ` Thomas Richter 0 siblings, 0 replies; 6+ messages in thread From: Thomas Richter @ 2021-05-20 6:35 UTC (permalink / raw) To: Arnaldo Carvalho de Melo, Ian Rogers Cc: sumanth Korikkar, Heiko Carstens, linux-perf-use., Namhyung Kim On 5/19/21 7:18 PM, Arnaldo Carvalho de Melo wrote: > Em Wed, May 19, 2021 at 09:27:14AM -0700, Ian Rogers escreveu: >> On Wed, May 19, 2021 at 7:57 AM Thomas Richter <tmricht@linux.ibm.com> wrote: >>> >>> Using kernel 5.13.0.rc2 command perf list dumps core on my x86 >>> virtual machine: >>> >>> [root@f34 perf]# ./perf list >>> Segmentation fault (core dumped) >>> ^C >>> [root@f34 perf]# >>> >>> The root case this this change in file ../include/uapi/linux/perf_event.h: >>> enum perf_sw_ids { >>> PERF_COUNT_SW_CPU_CLOCK = 0, >>> ... >>> ---> PERF_COUNT_SW_CGROUP_SWITCHES = 11, >>> >>> PERF_COUNT_SW_MAX, /* non-ABI */ >>> }; >>> >>> This change increases PERF_COUNT_SW_MAX to 12. However this >>> change is not reflected in file util/parse-events.c where data structure >>> >>> struct event_symbol event_symbols_sw[PERF_COUNT_SW_MAX] = { >>> .... >>> } >>> >>> is defined and it misses the symbol name and alias for this new software >>> event. So when command 'perf list' is called, the call chain sequence >>> is >>> cmd_list() >>> print_events() >>> print_symbol_events(event_glob, PERF_TYPE_SOFTWARE, >>> event_symbols_sw, PERF_COUNT_SW_MAX, name_only); >>> >>> where PERF_COUNT_SW_MAX is 12 and structure event_symbols_sw[] contains >>> only 11 elements. This ends up with the last element of the array being >>> all zeroes and the line: >>> >>> if (!name_only && strlen(syms->alias)) >>> >>> dumps core because syms->alias is a NULL pointer. >>> >>> Is this dummy event PERF_COUNT_SW_CGROUP_SWITCHES simply missing in the >>> event_symbols_sw[] array or is there more to it (which I am missing). >>> >>> Thanks. >>> >>> PS: I can sent a patch if needed.... >> >> I believe Namhyung's pending change will fix this: >> https://lore.kernel.org/lkml/20210210083327.22726-3-namhyung@kernel.org/ > > Ok, I'll pick that one instead of the one I did, similar one. > > - Arnaldo > Thanks for looking into this, Namhyung's patch fixes this issue. -- Thomas Richter, Dept 3303, IBM s390 Linux Development, Boeblingen, Germany -- Vorsitzender des Aufsichtsrats: Gregor Pillen Geschäftsführung: Dirk Wittkopp Sitz der Gesellschaft: Böblingen / Registergericht: Amtsgericht Stuttgart, HRB 243294 ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2021-05-20 6:35 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2021-05-19 14:57 perf list dumps core using 5.13.0.rc2 Thomas Richter 2021-05-19 16:26 ` Arnaldo Carvalho de Melo 2021-05-19 17:00 ` Arnaldo Carvalho de Melo 2021-05-19 16:27 ` Ian Rogers 2021-05-19 17:18 ` Arnaldo Carvalho de Melo 2021-05-20 6:35 ` Thomas Richter
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).