Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

perf metricgroups: Use zfree() to reduce chances of use after free

Do defensive programming by using zfree() to initialize freed pointers
to NULL, so that eventual use after free result in a NULL pointer deref
instead of more subtle behaviour.

This file already used zfree() in other places, so this just plugs some
leftovers.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

+9 -9
+9 -9
tools/perf/util/metricgroup.c
··· 90 90 struct metric_expr *expr, *tmp; 91 91 92 92 list_for_each_entry_safe(expr, tmp, &me->head, nd) { 93 - free((char *)expr->metric_name); 94 - free(expr->metric_refs); 95 - free(expr->metric_events); 93 + zfree(&expr->metric_name); 94 + zfree(&expr->metric_refs); 95 + zfree(&expr->metric_events); 96 96 free(expr); 97 97 } 98 98 ··· 192 192 if (!m) 193 193 return; 194 194 195 - free(m->metric_refs); 195 + zfree(&m->metric_refs); 196 196 expr__ctx_free(m->pctx); 197 - free((char *)m->modifier); 197 + zfree(&m->modifier); 198 198 evlist__delete(m->evlist); 199 199 free(m); 200 200 } ··· 617 617 if (strstr(ev->name, "metric-id=")) { 618 618 bool has_slash = false; 619 619 620 - free(ev->name); 620 + zfree(&ev->name); 621 621 for (cur = strchr(sb.buf, '@') ; cur; cur = strchr(++cur, '@')) { 622 622 *cur = '/'; 623 623 has_slash = true; ··· 1760 1760 alloc_size = sizeof(*new_expr->metric_events); 1761 1761 new_expr->metric_events = calloc(nr + 1, alloc_size); 1762 1762 if (!new_expr->metric_events) { 1763 - free(new_expr->metric_refs); 1763 + zfree(&new_expr->metric_refs); 1764 1764 free(new_expr); 1765 1765 return -ENOMEM; 1766 1766 } ··· 1770 1770 evsel = old_expr->metric_events[idx]; 1771 1771 evsel = evlist__find_evsel(evlist, evsel->core.idx); 1772 1772 if (evsel == NULL) { 1773 - free(new_expr->metric_events); 1774 - free(new_expr->metric_refs); 1773 + zfree(&new_expr->metric_events); 1774 + zfree(&new_expr->metric_refs); 1775 1775 free(new_expr); 1776 1776 return -EINVAL; 1777 1777 }