Re: [PATCH] perf parse: Copy string to perf_evsel_config_term

From: Leo Yan
Date: Mon Jan 06 2020 - 19:57:53 EST


Hi Jiri,

On Mon, Jan 06, 2020 at 04:12:41PM +0100, Jiri Olsa wrote:

[...]

> > diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
> > index ed7c008b9c8b..5972acdd40d6 100644
> > --- a/tools/perf/util/parse-events.c
> > +++ b/tools/perf/util/parse-events.c
> > @@ -1220,7 +1220,6 @@ static int get_config_terms(struct list_head *head_config,
> > struct list_head *head_terms __maybe_unused)
> > {
> > #define ADD_CONFIG_TERM(__type, __name, __val) \
> > -do { \
> > struct perf_evsel_config_term *__t; \
> > \
> > __t = zalloc(sizeof(*__t)); \
> > @@ -1229,9 +1228,19 @@ do { \
> > \
> > INIT_LIST_HEAD(&__t->list); \
> > __t->type = PERF_EVSEL__CONFIG_TERM_ ## __type; \
> > - __t->val.__name = __val; \
> > __t->weak = term->weak; \
> > - list_add_tail(&__t->list, head_terms); \
> > + list_add_tail(&__t->list, head_terms)
> > +
> > +#define ADD_CONFIG_TERM_VAL(__type, __name, __val) \
> > +do { \
> > + ADD_CONFIG_TERM(__type, __name, __val); \
> > + __t->val.__name = __val; \
> > +} while (0)
> > +
> > +#define ADD_CONFIG_TERM_STR(__type, __name, __val) \
> > +do { \
> > + ADD_CONFIG_TERM(__type, __name, __val); \
> > + __t->val.__name = strdup(__val); \
>
> ok, I understand now.. we move the pointer to the perf_evsel_config_term,
> but release it after in parse_events_terms__purge
>
> the change seems ok, but please check on the strdup return value
> and cleanup and return -ENOMEM if it fails in here

Thanks for suggestion. Will do it.

Thanks,
Leo