lkml.org 
[lkml]   [2013]   [Jun]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH V2 06/15] perf tools: fix parse_events_terms() freeing local variable on error path
    Date
    The list_head is on the stack, so just free the rest of the list.

    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    ---
    tools/perf/util/parse-events.c | 7 ++++++-
    tools/perf/util/parse-events.h | 1 +
    tools/perf/util/pmu.c | 2 +-
    3 files changed, 8 insertions(+), 2 deletions(-)

    diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
    index 995fc25..d9cb055 100644
    --- a/tools/perf/util/parse-events.c
    +++ b/tools/perf/util/parse-events.c
    @@ -1231,12 +1231,17 @@ int parse_events_term__clone(struct parse_events_term **new,
    term->val.str, term->val.num);
    }

    -void parse_events__free_terms(struct list_head *terms)
    +void parse_events__free_terms_only(struct list_head *terms)
    {
    struct parse_events_term *term, *h;

    list_for_each_entry_safe(term, h, terms, list)
    free(term);
    +}
    +
    +void parse_events__free_terms(struct list_head *terms)
    +{
    + parse_events__free_terms_only(terms);

    free(terms);
    }
    diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
    index 8a48593..6cb6f32 100644
    --- a/tools/perf/util/parse-events.h
    +++ b/tools/perf/util/parse-events.h
    @@ -80,6 +80,7 @@ int parse_events_term__sym_hw(struct parse_events_term **term,
    char *config, unsigned idx);
    int parse_events_term__clone(struct parse_events_term **new,
    struct parse_events_term *term);
    +void parse_events__free_terms_only(struct list_head *terms);
    void parse_events__free_terms(struct list_head *terms);
    int parse_events__modifier_event(struct list_head *list, char *str, bool add);
    int parse_events__modifier_group(struct list_head *list, char *event_mod);
    diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
    index 4c6f9c4..5dd9e37 100644
    --- a/tools/perf/util/pmu.c
    +++ b/tools/perf/util/pmu.c
    @@ -194,7 +194,7 @@ static int pmu_alias_terms(struct perf_pmu_alias *alias,
    list_for_each_entry(term, &alias->terms, list) {
    ret = parse_events_term__clone(&clone, term);
    if (ret) {
    - parse_events__free_terms(&list);
    + parse_events__free_terms_only(&list);
    return ret;
    }
    list_add_tail(&clone->list, &list);
    --
    1.7.11.7


    \
     
     \ /
      Last update: 2013-06-27 10:41    [W:3.386 / U:0.140 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site