Skip to content

Commit

Permalink
perf tools: Use zfree() to avoid keeping dangling pointers
Browse files Browse the repository at this point in the history
The cases changed in this patch are for when we free but keep the
pointer to the freed area, which is not always a good idea.

Be more defensive and zero the pointer to avoid possible use after
free bugs to take more time to be detected.

Signed-off-by: Taeung Song <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Namhyung Kim <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Wang Nan <[email protected]>
Link: http://lkml.kernel.org/r/[email protected]
[ rewrote commit log ]
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
  • Loading branch information
Taeung authored and acmel committed Feb 8, 2017
1 parent 506fde1 commit 360e071
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions tools/perf/util/parse-events.c
Original file line number Diff line number Diff line change
Expand Up @@ -1479,7 +1479,7 @@ static void perf_pmu__parse_cleanup(void)

for (i = 0; i < perf_pmu_events_list_num; i++) {
p = perf_pmu_events_list + i;
free(p->symbol);
zfree(&p->symbol);
}
zfree(&perf_pmu_events_list);
perf_pmu_events_list_num = 0;
Expand Down Expand Up @@ -1570,7 +1570,7 @@ perf_pmu__parse_check(const char *name)
r = bsearch(&p, perf_pmu_events_list,
(size_t) perf_pmu_events_list_num,
sizeof(struct perf_pmu_event_symbol), comp_pmu);
free(p.symbol);
zfree(&p.symbol);
return r ? r->type : PMU_EVENT_SYMBOL_ERR;
}

Expand Down Expand Up @@ -1717,8 +1717,8 @@ static void parse_events_print_error(struct parse_events_error *err,
fprintf(stderr, "%*s\\___ %s\n", idx + 1, "", err->str);
if (err->help)
fprintf(stderr, "\n%s\n", err->help);
free(err->str);
free(err->help);
zfree(&err->str);
zfree(&err->help);
}

fprintf(stderr, "Run 'perf list' for a list of valid events\n");
Expand Down Expand Up @@ -2413,7 +2413,7 @@ void parse_events_terms__purge(struct list_head *terms)

list_for_each_entry_safe(term, h, terms, list) {
if (term->array.nr_ranges)
free(term->array.ranges);
zfree(&term->array.ranges);
list_del_init(&term->list);
free(term);
}
Expand All @@ -2429,7 +2429,7 @@ void parse_events_terms__delete(struct list_head *terms)

void parse_events__clear_array(struct parse_events_array *a)
{
free(a->ranges);
zfree(&a->ranges);
}

void parse_events_evlist_error(struct parse_events_evlist *data,
Expand Down

0 comments on commit 360e071

Please sign in to comment.