Messages in this thread | | | From | Ian Rogers <> | Date | Mon, 18 Jul 2022 18:10:24 -0700 | Subject | Re: [PATCH 1/2] perf parse-events: Fix segfault when event parser gets an error |
| |
On Tue, Jul 12, 2022 at 4:28 AM Adrian Hunter <adrian.hunter@intel.com> wrote: > > parse_events() is often called with parse_events_error set to NULL. > Make parse_events_error__handle() not segfault in that case. > > Fixes: 43eb05d06679 ("perf tests: Support 'Track with sched_switch' test for hybrid") > Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> > --- > tools/perf/util/parse-events.c | 14 +++++++++++--- > 1 file changed, 11 insertions(+), 3 deletions(-) > > diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c > index 7ed235740431..700c95eafd62 100644 > --- a/tools/perf/util/parse-events.c > +++ b/tools/perf/util/parse-events.c > @@ -2391,9 +2391,12 @@ void parse_events_error__exit(struct parse_events_error *err) > void parse_events_error__handle(struct parse_events_error *err, int idx, > char *str, char *help) > { > - if (WARN(!str, "WARNING: failed to provide error string\n")) { > - free(help); > - return; > + if (WARN(!str, "WARNING: failed to provide error string\n")) > + goto out_free; > + if (!err) { > + /* Assume caller does not want message printed */ > + pr_debug("event syntax error: %s\n", str); > + goto out_free;
It feels like a simpler invariant (as done elsewhere) to have the caller always pass err and then in the caller to call parse_events_error__exit. Any reason for behavior change?
Thanks, Ian
> } > switch (err->num_errors) { > case 0: > @@ -2419,6 +2422,11 @@ void parse_events_error__handle(struct parse_events_error *err, int idx, > break; > } > err->num_errors++; > + return; > + > +out_free: > + free(str); > + free(help); > } > > #define MAX_WIDTH 1000 > -- > 2.25.1 >
| |