On Sat, Sep 05, 2020 at 11:19:11AM +0900, Namhyung Kim wrote:
> I found some memory leaks while reading the metric code.  Some are
> real and others only occur in the error path.  When it failed during
> metric or event parsing, it should release all resources properly.
> 
> Cc: Kajol Jain <kj...@linux.ibm.com>
> Cc: John Garry <john.ga...@huawei.com>
> Cc: Ian Rogers <irog...@google.com>
> Fixes: b18f3e365019d ("perf stat: Support JSON metrics in perf stat")
> Signed-off-by: Namhyung Kim <namhy...@kernel.org>

Acked-by: Jiri Olsa <jo...@redhat.com>

thanks,
jirka

> ---
>  tools/perf/util/metricgroup.c | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c
> index 8831b964288f..af664d6218d6 100644
> --- a/tools/perf/util/metricgroup.c
> +++ b/tools/perf/util/metricgroup.c
> @@ -530,6 +530,9 @@ void metricgroup__print(bool metrics, bool metricgroups, 
> char *filter,
>                                               continue;
>                                       strlist__add(me->metrics, s);
>                               }
> +
> +                             if (!raw)
> +                                     free(s);
>                       }
>                       free(omg);
>               }
> @@ -1040,7 +1043,7 @@ static int parse_groups(struct evlist *perf_evlist, 
> const char *str,
>       ret = metricgroup__add_metric_list(str, metric_no_group,
>                                          &extra_events, &metric_list, map);
>       if (ret)
> -             return ret;
> +             goto out;
>       pr_debug("adding %s\n", extra_events.buf);
>       bzero(&parse_error, sizeof(parse_error));
>       ret = __parse_events(perf_evlist, extra_events.buf, &parse_error, 
> fake_pmu);
> @@ -1048,11 +1051,11 @@ static int parse_groups(struct evlist *perf_evlist, 
> const char *str,
>               parse_events_print_error(&parse_error, extra_events.buf);
>               goto out;
>       }
> -     strbuf_release(&extra_events);
>       ret = metricgroup__setup_events(&metric_list, metric_no_merge,
>                                       perf_evlist, metric_events);
>  out:
>       metricgroup__free_metrics(&metric_list);
> +     strbuf_release(&extra_events);
>       return ret;
>  }
>  
> -- 
> 2.28.0.526.ge36021eeef-goog
> 

Reply via email to