diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2013-12-27 14:55:14 -0500 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2013-12-27 15:08:19 -0500 |
commit | 74cf249d5cf7de84c88cca69a2f13b13d500ff94 (patch) | |
tree | fc61aabd22d981e95fe6ffe9a839e07bbb1f95a0 /tools/perf/util | |
parent | 046625231a0397f1776eb353a4ec9ff142cd2f6b (diff) |
perf tools: Use zfree to help detect use after free bugs
Several areas already used this technique, so do some audit to
consistently use it elsewhere.
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-9sbere0kkplwe45ak6rk4a1f@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util')
-rw-r--r-- | tools/perf/util/annotate.c | 20 | ||||
-rw-r--r-- | tools/perf/util/cgroup.c | 2 | ||||
-rw-r--r-- | tools/perf/util/comm.c | 2 | ||||
-rw-r--r-- | tools/perf/util/evsel.c | 8 | ||||
-rw-r--r-- | tools/perf/util/header.c | 10 | ||||
-rw-r--r-- | tools/perf/util/help.c | 4 | ||||
-rw-r--r-- | tools/perf/util/hist.c | 6 | ||||
-rw-r--r-- | tools/perf/util/parse-events.c | 8 | ||||
-rw-r--r-- | tools/perf/util/pmu.c | 2 | ||||
-rw-r--r-- | tools/perf/util/probe-event.c | 8 | ||||
-rw-r--r-- | tools/perf/util/probe-finder.c | 2 | ||||
-rw-r--r-- | tools/perf/util/session.c | 24 | ||||
-rw-r--r-- | tools/perf/util/srcline.c | 6 | ||||
-rw-r--r-- | tools/perf/util/strbuf.c | 2 | ||||
-rw-r--r-- | tools/perf/util/strfilter.c | 2 | ||||
-rw-r--r-- | tools/perf/util/string.c | 2 | ||||
-rw-r--r-- | tools/perf/util/strlist.c | 3 | ||||
-rw-r--r-- | tools/perf/util/svghelper.c | 5 | ||||
-rw-r--r-- | tools/perf/util/symbol-elf.c | 2 | ||||
-rw-r--r-- | tools/perf/util/symbol-minimal.c | 3 | ||||
-rw-r--r-- | tools/perf/util/symbol.c | 2 | ||||
-rw-r--r-- | tools/perf/util/thread_map.c | 10 | ||||
-rw-r--r-- | tools/perf/util/trace-event-info.c | 4 | ||||
-rw-r--r-- | tools/perf/util/values.c | 14 |
24 files changed, 77 insertions, 74 deletions
diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c index a78721d14694..469eb679fb9d 100644 --- a/tools/perf/util/annotate.c +++ b/tools/perf/util/annotate.c | |||
@@ -26,10 +26,10 @@ static int disasm_line__parse(char *line, char **namep, char **rawp); | |||
26 | 26 | ||
27 | static void ins__delete(struct ins_operands *ops) | 27 | static void ins__delete(struct ins_operands *ops) |
28 | { | 28 | { |
29 | free(ops->source.raw); | 29 | zfree(&ops->source.raw); |
30 | free(ops->source.name); | 30 | zfree(&ops->source.name); |
31 | free(ops->target.raw); | 31 | zfree(&ops->target.raw); |
32 | free(ops->target.name); | 32 | zfree(&ops->target.name); |
33 | } | 33 | } |
34 | 34 | ||
35 | static int ins__raw_scnprintf(struct ins *ins, char *bf, size_t size, | 35 | static int ins__raw_scnprintf(struct ins *ins, char *bf, size_t size, |
@@ -204,9 +204,9 @@ static int lock__scnprintf(struct ins *ins, char *bf, size_t size, | |||
204 | 204 | ||
205 | static void lock__delete(struct ins_operands *ops) | 205 | static void lock__delete(struct ins_operands *ops) |
206 | { | 206 | { |
207 | free(ops->locked.ops); | 207 | zfree(&ops->locked.ops); |
208 | free(ops->target.raw); | 208 | zfree(&ops->target.raw); |
209 | free(ops->target.name); | 209 | zfree(&ops->target.name); |
210 | } | 210 | } |
211 | 211 | ||
212 | static struct ins_ops lock_ops = { | 212 | static struct ins_ops lock_ops = { |
@@ -583,7 +583,7 @@ static struct disasm_line *disasm_line__new(s64 offset, char *line, size_t privs | |||
583 | return dl; | 583 | return dl; |
584 | 584 | ||
585 | out_free_line: | 585 | out_free_line: |
586 | free(dl->line); | 586 | zfree(&dl->line); |
587 | out_delete: | 587 | out_delete: |
588 | free(dl); | 588 | free(dl); |
589 | return NULL; | 589 | return NULL; |
@@ -591,8 +591,8 @@ out_delete: | |||
591 | 591 | ||
592 | void disasm_line__free(struct disasm_line *dl) | 592 | void disasm_line__free(struct disasm_line *dl) |
593 | { | 593 | { |
594 | free(dl->line); | 594 | zfree(&dl->line); |
595 | free(dl->name); | 595 | zfree(&dl->name); |
596 | if (dl->ins && dl->ins->ops->free) | 596 | if (dl->ins && dl->ins->ops->free) |
597 | dl->ins->ops->free(&dl->ops); | 597 | dl->ins->ops->free(&dl->ops); |
598 | else | 598 | else |
diff --git a/tools/perf/util/cgroup.c b/tools/perf/util/cgroup.c index 96bbda1ddb83..0922aa4218c2 100644 --- a/tools/perf/util/cgroup.c +++ b/tools/perf/util/cgroup.c | |||
@@ -133,7 +133,7 @@ void close_cgroup(struct cgroup_sel *cgrp) | |||
133 | /* XXX: not reentrant */ | 133 | /* XXX: not reentrant */ |
134 | if (--cgrp->refcnt == 0) { | 134 | if (--cgrp->refcnt == 0) { |
135 | close(cgrp->fd); | 135 | close(cgrp->fd); |
136 | free(cgrp->name); | 136 | zfree(&cgrp->name); |
137 | free(cgrp); | 137 | free(cgrp); |
138 | } | 138 | } |
139 | } | 139 | } |
diff --git a/tools/perf/util/comm.c b/tools/perf/util/comm.c index ee0df0e24cdb..67d1e404c0cb 100644 --- a/tools/perf/util/comm.c +++ b/tools/perf/util/comm.c | |||
@@ -21,7 +21,7 @@ static void comm_str__put(struct comm_str *cs) | |||
21 | { | 21 | { |
22 | if (!--cs->ref) { | 22 | if (!--cs->ref) { |
23 | rb_erase(&cs->rb_node, &comm_str_root); | 23 | rb_erase(&cs->rb_node, &comm_str_root); |
24 | free(cs->str); | 24 | zfree(&cs->str); |
25 | free(cs); | 25 | free(cs); |
26 | } | 26 | } |
27 | } | 27 | } |
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index 93b6031d5459..ade8d9c1c431 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c | |||
@@ -208,7 +208,7 @@ struct perf_evsel *perf_evsel__newtp_idx(const char *sys, const char *name, int | |||
208 | return evsel; | 208 | return evsel; |
209 | 209 | ||
210 | out_free: | 210 | out_free: |
211 | free(evsel->name); | 211 | zfree(&evsel->name); |
212 | free(evsel); | 212 | free(evsel); |
213 | return NULL; | 213 | return NULL; |
214 | } | 214 | } |
@@ -766,7 +766,7 @@ void perf_evsel__close_fd(struct perf_evsel *evsel, int ncpus, int nthreads) | |||
766 | 766 | ||
767 | void perf_evsel__free_counts(struct perf_evsel *evsel) | 767 | void perf_evsel__free_counts(struct perf_evsel *evsel) |
768 | { | 768 | { |
769 | free(evsel->counts); | 769 | zfree(&evsel->counts); |
770 | } | 770 | } |
771 | 771 | ||
772 | void perf_evsel__exit(struct perf_evsel *evsel) | 772 | void perf_evsel__exit(struct perf_evsel *evsel) |
@@ -780,10 +780,10 @@ void perf_evsel__delete(struct perf_evsel *evsel) | |||
780 | { | 780 | { |
781 | perf_evsel__exit(evsel); | 781 | perf_evsel__exit(evsel); |
782 | close_cgroup(evsel->cgrp); | 782 | close_cgroup(evsel->cgrp); |
783 | free(evsel->group_name); | 783 | zfree(&evsel->group_name); |
784 | if (evsel->tp_format) | 784 | if (evsel->tp_format) |
785 | pevent_free_format(evsel->tp_format); | 785 | pevent_free_format(evsel->tp_format); |
786 | free(evsel->name); | 786 | zfree(&evsel->name); |
787 | free(evsel); | 787 | free(evsel); |
788 | } | 788 | } |
789 | 789 | ||
diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index 20f3a9c97bd8..a4a60b7887ee 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c | |||
@@ -800,10 +800,10 @@ static void free_cpu_topo(struct cpu_topo *tp) | |||
800 | return; | 800 | return; |
801 | 801 | ||
802 | for (i = 0 ; i < tp->core_sib; i++) | 802 | for (i = 0 ; i < tp->core_sib; i++) |
803 | free(tp->core_siblings[i]); | 803 | zfree(&tp->core_siblings[i]); |
804 | 804 | ||
805 | for (i = 0 ; i < tp->thread_sib; i++) | 805 | for (i = 0 ; i < tp->thread_sib; i++) |
806 | free(tp->thread_siblings[i]); | 806 | zfree(&tp->thread_siblings[i]); |
807 | 807 | ||
808 | free(tp); | 808 | free(tp); |
809 | } | 809 | } |
@@ -1232,8 +1232,8 @@ static void free_event_desc(struct perf_evsel *events) | |||
1232 | return; | 1232 | return; |
1233 | 1233 | ||
1234 | for (evsel = events; evsel->attr.size; evsel++) { | 1234 | for (evsel = events; evsel->attr.size; evsel++) { |
1235 | free(evsel->name); | 1235 | zfree(&evsel->name); |
1236 | free(evsel->id); | 1236 | zfree(&evsel->id); |
1237 | } | 1237 | } |
1238 | 1238 | ||
1239 | free(events); | 1239 | free(events); |
@@ -2105,7 +2105,7 @@ static int process_group_desc(struct perf_file_section *section __maybe_unused, | |||
2105 | ret = 0; | 2105 | ret = 0; |
2106 | out_free: | 2106 | out_free: |
2107 | for (i = 0; i < nr_groups; i++) | 2107 | for (i = 0; i < nr_groups; i++) |
2108 | free(desc[i].name); | 2108 | zfree(&desc[i].name); |
2109 | free(desc); | 2109 | free(desc); |
2110 | 2110 | ||
2111 | return ret; | 2111 | return ret; |
diff --git a/tools/perf/util/help.c b/tools/perf/util/help.c index 7b68978e50d2..86c37c472263 100644 --- a/tools/perf/util/help.c +++ b/tools/perf/util/help.c | |||
@@ -22,8 +22,8 @@ static void clean_cmdnames(struct cmdnames *cmds) | |||
22 | unsigned int i; | 22 | unsigned int i; |
23 | 23 | ||
24 | for (i = 0; i < cmds->cnt; ++i) | 24 | for (i = 0; i < cmds->cnt; ++i) |
25 | free(cmds->names[i]); | 25 | zfree(&cmds->names[i]); |
26 | free(cmds->names); | 26 | zfree(&cmds->names); |
27 | cmds->cnt = 0; | 27 | cmds->cnt = 0; |
28 | cmds->alloc = 0; | 28 | cmds->alloc = 0; |
29 | } | 29 | } |
diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c index 6cd4823a7a8b..4ed3e883240d 100644 --- a/tools/perf/util/hist.c +++ b/tools/perf/util/hist.c | |||
@@ -372,7 +372,7 @@ static struct hist_entry *add_hist_entry(struct hists *hists, | |||
372 | * This mem info was allocated from machine__resolve_mem | 372 | * This mem info was allocated from machine__resolve_mem |
373 | * and will not be used anymore. | 373 | * and will not be used anymore. |
374 | */ | 374 | */ |
375 | free(entry->mem_info); | 375 | zfree(&entry->mem_info); |
376 | 376 | ||
377 | /* If the map of an existing hist_entry has | 377 | /* If the map of an existing hist_entry has |
378 | * become out-of-date due to an exec() or | 378 | * become out-of-date due to an exec() or |
@@ -475,8 +475,8 @@ hist_entry__collapse(struct hist_entry *left, struct hist_entry *right) | |||
475 | 475 | ||
476 | void hist_entry__free(struct hist_entry *he) | 476 | void hist_entry__free(struct hist_entry *he) |
477 | { | 477 | { |
478 | free(he->branch_info); | 478 | zfree(&he->branch_info); |
479 | free(he->mem_info); | 479 | zfree(&he->mem_info); |
480 | free_srcline(he->srcline); | 480 | free_srcline(he->srcline); |
481 | free(he); | 481 | free(he); |
482 | } | 482 | } |
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 094c28ba2fae..0153435b8427 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c | |||
@@ -204,7 +204,7 @@ struct tracepoint_path *tracepoint_id_to_path(u64 config) | |||
204 | } | 204 | } |
205 | path->name = malloc(MAX_EVENT_LENGTH); | 205 | path->name = malloc(MAX_EVENT_LENGTH); |
206 | if (!path->name) { | 206 | if (!path->name) { |
207 | free(path->system); | 207 | zfree(&path->system); |
208 | free(path); | 208 | free(path); |
209 | return NULL; | 209 | return NULL; |
210 | } | 210 | } |
@@ -236,8 +236,8 @@ struct tracepoint_path *tracepoint_name_to_path(const char *name) | |||
236 | path->name = strdup(str+1); | 236 | path->name = strdup(str+1); |
237 | 237 | ||
238 | if (path->system == NULL || path->name == NULL) { | 238 | if (path->system == NULL || path->name == NULL) { |
239 | free(path->system); | 239 | zfree(&path->system); |
240 | free(path->name); | 240 | zfree(&path->name); |
241 | free(path); | 241 | free(path); |
242 | path = NULL; | 242 | path = NULL; |
243 | } | 243 | } |
@@ -917,7 +917,7 @@ int parse_events_terms(struct list_head *terms, const char *str) | |||
917 | ret = parse_events__scanner(str, &data, PE_START_TERMS); | 917 | ret = parse_events__scanner(str, &data, PE_START_TERMS); |
918 | if (!ret) { | 918 | if (!ret) { |
919 | list_splice(data.terms, terms); | 919 | list_splice(data.terms, terms); |
920 | free(data.terms); | 920 | zfree(&data.terms); |
921 | return 0; | 921 | return 0; |
922 | } | 922 | } |
923 | 923 | ||
diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index 56fc10a5e288..0934d645ebdc 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c | |||
@@ -755,7 +755,7 @@ void print_pmu_events(const char *event_glob, bool name_only) | |||
755 | continue; | 755 | continue; |
756 | } | 756 | } |
757 | printf(" %-50s [Kernel PMU event]\n", aliases[j]); | 757 | printf(" %-50s [Kernel PMU event]\n", aliases[j]); |
758 | free(aliases[j]); | 758 | zfree(&aliases[j]); |
759 | printed++; | 759 | printed++; |
760 | } | 760 | } |
761 | if (printed) | 761 | if (printed) |
diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c index 4d3cd1a0278a..86ed8580c3cb 100644 --- a/tools/perf/util/probe-event.c +++ b/tools/perf/util/probe-event.c | |||
@@ -356,7 +356,7 @@ static int add_exec_to_probe_trace_events(struct probe_trace_event *tevs, | |||
356 | offset = tevs[i].point.address - stext; | 356 | offset = tevs[i].point.address - stext; |
357 | offset += tevs[i].point.offset; | 357 | offset += tevs[i].point.offset; |
358 | tevs[i].point.offset = 0; | 358 | tevs[i].point.offset = 0; |
359 | free(tevs[i].point.symbol); | 359 | zfree(&tevs[i].point.symbol); |
360 | ret = e_snprintf(buf, 32, "0x%lx", offset); | 360 | ret = e_snprintf(buf, 32, "0x%lx", offset); |
361 | if (ret < 0) | 361 | if (ret < 0) |
362 | break; | 362 | break; |
@@ -683,7 +683,7 @@ static int show_available_vars_at(struct debuginfo *dinfo, | |||
683 | */ | 683 | */ |
684 | fprintf(stdout, "\t@<%s+%lu>\n", vl->point.symbol, | 684 | fprintf(stdout, "\t@<%s+%lu>\n", vl->point.symbol, |
685 | vl->point.offset); | 685 | vl->point.offset); |
686 | free(vl->point.symbol); | 686 | zfree(&vl->point.symbol); |
687 | nvars = 0; | 687 | nvars = 0; |
688 | if (vl->vars) { | 688 | if (vl->vars) { |
689 | strlist__for_each(node, vl->vars) { | 689 | strlist__for_each(node, vl->vars) { |
@@ -1592,7 +1592,7 @@ void clear_perf_probe_event(struct perf_probe_event *pev) | |||
1592 | field = pev->args[i].field; | 1592 | field = pev->args[i].field; |
1593 | while (field) { | 1593 | while (field) { |
1594 | next = field->next; | 1594 | next = field->next; |
1595 | free(field->name); | 1595 | zfree(&field->name); |
1596 | free(field); | 1596 | free(field); |
1597 | field = next; | 1597 | field = next; |
1598 | } | 1598 | } |
@@ -2153,7 +2153,7 @@ end: | |||
2153 | for (i = 0; i < npevs; i++) { | 2153 | for (i = 0; i < npevs; i++) { |
2154 | for (j = 0; j < pkgs[i].ntevs; j++) | 2154 | for (j = 0; j < pkgs[i].ntevs; j++) |
2155 | clear_probe_trace_event(&pkgs[i].tevs[j]); | 2155 | clear_probe_trace_event(&pkgs[i].tevs[j]); |
2156 | free(pkgs[i].tevs); | 2156 | zfree(&pkgs[i].tevs); |
2157 | } | 2157 | } |
2158 | free(pkgs); | 2158 | free(pkgs); |
2159 | 2159 | ||
diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c index 6d8796e38d7f..061edb162b5b 100644 --- a/tools/perf/util/probe-finder.c +++ b/tools/perf/util/probe-finder.c | |||
@@ -1409,7 +1409,7 @@ int debuginfo__find_available_vars_at(struct debuginfo *dbg, | |||
1409 | if (ret < 0) { | 1409 | if (ret < 0) { |
1410 | /* Free vlist for error */ | 1410 | /* Free vlist for error */ |
1411 | while (af.nvls--) { | 1411 | while (af.nvls--) { |
1412 | free(af.vls[af.nvls].point.symbol); | 1412 | zfree(&af.vls[af.nvls].point.symbol); |
1413 | strlist__delete(af.vls[af.nvls].vars); | 1413 | strlist__delete(af.vls[af.nvls].vars); |
1414 | } | 1414 | } |
1415 | zfree(vls); | 1415 | zfree(vls); |
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index d3a857be9682..8ffe29c55d0f 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c | |||
@@ -132,18 +132,18 @@ static void perf_session__delete_threads(struct perf_session *session) | |||
132 | 132 | ||
133 | static void perf_session_env__delete(struct perf_session_env *env) | 133 | static void perf_session_env__delete(struct perf_session_env *env) |
134 | { | 134 | { |
135 | free(env->hostname); | 135 | zfree(&env->hostname); |
136 | free(env->os_release); | 136 | zfree(&env->os_release); |
137 | free(env->version); | 137 | zfree(&env->version); |
138 | free(env->arch); | 138 | zfree(&env->arch); |
139 | free(env->cpu_desc); | 139 | zfree(&env->cpu_desc); |
140 | free(env->cpuid); | 140 | zfree(&env->cpuid); |
141 | 141 | ||
142 | free(env->cmdline); | 142 | zfree(&env->cmdline); |
143 | free(env->sibling_cores); | 143 | zfree(&env->sibling_cores); |
144 | free(env->sibling_threads); | 144 | zfree(&env->sibling_threads); |
145 | free(env->numa_nodes); | 145 | zfree(&env->numa_nodes); |
146 | free(env->pmu_mappings); | 146 | zfree(&env->pmu_mappings); |
147 | } | 147 | } |
148 | 148 | ||
149 | void perf_session__delete(struct perf_session *session) | 149 | void perf_session__delete(struct perf_session *session) |
diff --git a/tools/perf/util/srcline.c b/tools/perf/util/srcline.c index 58b2bd8f38c9..7e67879ebd25 100644 --- a/tools/perf/util/srcline.c +++ b/tools/perf/util/srcline.c | |||
@@ -129,7 +129,7 @@ static struct a2l_data *addr2line_init(const char *path) | |||
129 | 129 | ||
130 | out: | 130 | out: |
131 | if (a2l) { | 131 | if (a2l) { |
132 | free((void *)a2l->input); | 132 | zfree((void **)&a2l->input); |
133 | free(a2l); | 133 | free(a2l); |
134 | } | 134 | } |
135 | bfd_close(abfd); | 135 | bfd_close(abfd); |
@@ -140,8 +140,8 @@ static void addr2line_cleanup(struct a2l_data *a2l) | |||
140 | { | 140 | { |
141 | if (a2l->abfd) | 141 | if (a2l->abfd) |
142 | bfd_close(a2l->abfd); | 142 | bfd_close(a2l->abfd); |
143 | free((void *)a2l->input); | 143 | zfree((void **)&a2l->input); |
144 | free(a2l->syms); | 144 | zfree(&a2l->syms); |
145 | free(a2l); | 145 | free(a2l); |
146 | } | 146 | } |
147 | 147 | ||
diff --git a/tools/perf/util/strbuf.c b/tools/perf/util/strbuf.c index cfa906882e2c..4abe23550c73 100644 --- a/tools/perf/util/strbuf.c +++ b/tools/perf/util/strbuf.c | |||
@@ -28,7 +28,7 @@ void strbuf_init(struct strbuf *sb, ssize_t hint) | |||
28 | void strbuf_release(struct strbuf *sb) | 28 | void strbuf_release(struct strbuf *sb) |
29 | { | 29 | { |
30 | if (sb->alloc) { | 30 | if (sb->alloc) { |
31 | free(sb->buf); | 31 | zfree(&sb->buf); |
32 | strbuf_init(sb, 0); | 32 | strbuf_init(sb, 0); |
33 | } | 33 | } |
34 | } | 34 | } |
diff --git a/tools/perf/util/strfilter.c b/tools/perf/util/strfilter.c index 3edd0538161f..79a757a2a15c 100644 --- a/tools/perf/util/strfilter.c +++ b/tools/perf/util/strfilter.c | |||
@@ -14,7 +14,7 @@ static void strfilter_node__delete(struct strfilter_node *node) | |||
14 | { | 14 | { |
15 | if (node) { | 15 | if (node) { |
16 | if (node->p && !is_operator(*node->p)) | 16 | if (node->p && !is_operator(*node->p)) |
17 | free((char *)node->p); | 17 | zfree((char **)&node->p); |
18 | strfilter_node__delete(node->l); | 18 | strfilter_node__delete(node->l); |
19 | strfilter_node__delete(node->r); | 19 | strfilter_node__delete(node->r); |
20 | free(node); | 20 | free(node); |
diff --git a/tools/perf/util/string.c b/tools/perf/util/string.c index f0b0c008c507..2553e5b55b89 100644 --- a/tools/perf/util/string.c +++ b/tools/perf/util/string.c | |||
@@ -128,7 +128,7 @@ void argv_free(char **argv) | |||
128 | { | 128 | { |
129 | char **p; | 129 | char **p; |
130 | for (p = argv; *p; p++) | 130 | for (p = argv; *p; p++) |
131 | free(*p); | 131 | zfree(p); |
132 | 132 | ||
133 | free(argv); | 133 | free(argv); |
134 | } | 134 | } |
diff --git a/tools/perf/util/strlist.c b/tools/perf/util/strlist.c index eabdce0a2daa..61a90bf24b4d 100644 --- a/tools/perf/util/strlist.c +++ b/tools/perf/util/strlist.c | |||
@@ -5,6 +5,7 @@ | |||
5 | */ | 5 | */ |
6 | 6 | ||
7 | #include "strlist.h" | 7 | #include "strlist.h" |
8 | #include "util.h" | ||
8 | #include <errno.h> | 9 | #include <errno.h> |
9 | #include <stdio.h> | 10 | #include <stdio.h> |
10 | #include <stdlib.h> | 11 | #include <stdlib.h> |
@@ -38,7 +39,7 @@ out_delete: | |||
38 | static void str_node__delete(struct str_node *snode, bool dupstr) | 39 | static void str_node__delete(struct str_node *snode, bool dupstr) |
39 | { | 40 | { |
40 | if (dupstr) | 41 | if (dupstr) |
41 | free((void *)snode->s); | 42 | zfree((void **)&snode->s); |
42 | free(snode); | 43 | free(snode); |
43 | } | 44 | } |
44 | 45 | ||
diff --git a/tools/perf/util/svghelper.c b/tools/perf/util/svghelper.c index 56a84f2cc46d..43262b83c541 100644 --- a/tools/perf/util/svghelper.c +++ b/tools/perf/util/svghelper.c | |||
@@ -21,6 +21,7 @@ | |||
21 | 21 | ||
22 | #include "perf.h" | 22 | #include "perf.h" |
23 | #include "svghelper.h" | 23 | #include "svghelper.h" |
24 | #include "util.h" | ||
24 | #include "cpumap.h" | 25 | #include "cpumap.h" |
25 | 26 | ||
26 | static u64 first_time, last_time; | 27 | static u64 first_time, last_time; |
@@ -708,8 +709,8 @@ int svg_build_topology_map(char *sib_core, int sib_core_nr, | |||
708 | return 0; | 709 | return 0; |
709 | 710 | ||
710 | exit: | 711 | exit: |
711 | free(t.sib_core); | 712 | zfree(&t.sib_core); |
712 | free(t.sib_thr); | 713 | zfree(&t.sib_thr); |
713 | 714 | ||
714 | return -1; | 715 | return -1; |
715 | } | 716 | } |
diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c index bf0ce29567b6..4b0a127a4d3b 100644 --- a/tools/perf/util/symbol-elf.c +++ b/tools/perf/util/symbol-elf.c | |||
@@ -554,7 +554,7 @@ bool symsrc__has_symtab(struct symsrc *ss) | |||
554 | 554 | ||
555 | void symsrc__destroy(struct symsrc *ss) | 555 | void symsrc__destroy(struct symsrc *ss) |
556 | { | 556 | { |
557 | free(ss->name); | 557 | zfree(&ss->name); |
558 | elf_end(ss->elf); | 558 | elf_end(ss->elf); |
559 | close(ss->fd); | 559 | close(ss->fd); |
560 | } | 560 | } |
diff --git a/tools/perf/util/symbol-minimal.c b/tools/perf/util/symbol-minimal.c index ac7070a2f2b6..bd15f490d04f 100644 --- a/tools/perf/util/symbol-minimal.c +++ b/tools/perf/util/symbol-minimal.c | |||
@@ -1,4 +1,5 @@ | |||
1 | #include "symbol.h" | 1 | #include "symbol.h" |
2 | #include "util.h" | ||
2 | 3 | ||
3 | #include <stdio.h> | 4 | #include <stdio.h> |
4 | #include <fcntl.h> | 5 | #include <fcntl.h> |
@@ -275,7 +276,7 @@ bool symsrc__has_symtab(struct symsrc *ss __maybe_unused) | |||
275 | 276 | ||
276 | void symsrc__destroy(struct symsrc *ss) | 277 | void symsrc__destroy(struct symsrc *ss) |
277 | { | 278 | { |
278 | free(ss->name); | 279 | zfree(&ss->name); |
279 | close(ss->fd); | 280 | close(ss->fd); |
280 | } | 281 | } |
281 | 282 | ||
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c index fd9e1a4fad16..39ce9adbaaf0 100644 --- a/tools/perf/util/symbol.c +++ b/tools/perf/util/symbol.c | |||
@@ -796,7 +796,7 @@ static void delete_modules(struct rb_root *modules) | |||
796 | mi = rb_entry(next, struct module_info, rb_node); | 796 | mi = rb_entry(next, struct module_info, rb_node); |
797 | next = rb_next(&mi->rb_node); | 797 | next = rb_next(&mi->rb_node); |
798 | rb_erase(&mi->rb_node, modules); | 798 | rb_erase(&mi->rb_node, modules); |
799 | free(mi->name); | 799 | zfree(&mi->name); |
800 | free(mi); | 800 | free(mi); |
801 | } | 801 | } |
802 | } | 802 | } |
diff --git a/tools/perf/util/thread_map.c b/tools/perf/util/thread_map.c index cf44644a4058..5d3215912105 100644 --- a/tools/perf/util/thread_map.c +++ b/tools/perf/util/thread_map.c | |||
@@ -41,7 +41,7 @@ struct thread_map *thread_map__new_by_pid(pid_t pid) | |||
41 | } | 41 | } |
42 | 42 | ||
43 | for (i=0; i<items; i++) | 43 | for (i=0; i<items; i++) |
44 | free(namelist[i]); | 44 | zfree(&namelist[i]); |
45 | free(namelist); | 45 | free(namelist); |
46 | 46 | ||
47 | return threads; | 47 | return threads; |
@@ -118,7 +118,7 @@ struct thread_map *thread_map__new_by_uid(uid_t uid) | |||
118 | threads->map[threads->nr + i] = atoi(namelist[i]->d_name); | 118 | threads->map[threads->nr + i] = atoi(namelist[i]->d_name); |
119 | 119 | ||
120 | for (i = 0; i < items; i++) | 120 | for (i = 0; i < items; i++) |
121 | free(namelist[i]); | 121 | zfree(&namelist[i]); |
122 | free(namelist); | 122 | free(namelist); |
123 | 123 | ||
124 | threads->nr += items; | 124 | threads->nr += items; |
@@ -135,7 +135,7 @@ out_free_threads: | |||
135 | 135 | ||
136 | out_free_namelist: | 136 | out_free_namelist: |
137 | for (i = 0; i < items; i++) | 137 | for (i = 0; i < items; i++) |
138 | free(namelist[i]); | 138 | zfree(&namelist[i]); |
139 | free(namelist); | 139 | free(namelist); |
140 | 140 | ||
141 | out_free_closedir: | 141 | out_free_closedir: |
@@ -194,7 +194,7 @@ static struct thread_map *thread_map__new_by_pid_str(const char *pid_str) | |||
194 | 194 | ||
195 | for (i = 0; i < items; i++) { | 195 | for (i = 0; i < items; i++) { |
196 | threads->map[j++] = atoi(namelist[i]->d_name); | 196 | threads->map[j++] = atoi(namelist[i]->d_name); |
197 | free(namelist[i]); | 197 | zfree(&namelist[i]); |
198 | } | 198 | } |
199 | threads->nr = total_tasks; | 199 | threads->nr = total_tasks; |
200 | free(namelist); | 200 | free(namelist); |
@@ -206,7 +206,7 @@ out: | |||
206 | 206 | ||
207 | out_free_namelist: | 207 | out_free_namelist: |
208 | for (i = 0; i < items; i++) | 208 | for (i = 0; i < items; i++) |
209 | free(namelist[i]); | 209 | zfree(&namelist[i]); |
210 | free(namelist); | 210 | free(namelist); |
211 | 211 | ||
212 | out_free_threads: | 212 | out_free_threads: |
diff --git a/tools/perf/util/trace-event-info.c b/tools/perf/util/trace-event-info.c index 9f73bf43862c..7e6fcfe8b438 100644 --- a/tools/perf/util/trace-event-info.c +++ b/tools/perf/util/trace-event-info.c | |||
@@ -397,8 +397,8 @@ put_tracepoints_path(struct tracepoint_path *tps) | |||
397 | struct tracepoint_path *t = tps; | 397 | struct tracepoint_path *t = tps; |
398 | 398 | ||
399 | tps = tps->next; | 399 | tps = tps->next; |
400 | free(t->name); | 400 | zfree(&t->name); |
401 | free(t->system); | 401 | zfree(&t->system); |
402 | free(t); | 402 | free(t); |
403 | } | 403 | } |
404 | } | 404 | } |
diff --git a/tools/perf/util/values.c b/tools/perf/util/values.c index 697c8b4e59cc..0fb3c1fcd3e6 100644 --- a/tools/perf/util/values.c +++ b/tools/perf/util/values.c | |||
@@ -31,14 +31,14 @@ void perf_read_values_destroy(struct perf_read_values *values) | |||
31 | return; | 31 | return; |
32 | 32 | ||
33 | for (i = 0; i < values->threads; i++) | 33 | for (i = 0; i < values->threads; i++) |
34 | free(values->value[i]); | 34 | zfree(&values->value[i]); |
35 | free(values->value); | 35 | zfree(&values->value); |
36 | free(values->pid); | 36 | zfree(&values->pid); |
37 | free(values->tid); | 37 | zfree(&values->tid); |
38 | free(values->counterrawid); | 38 | zfree(&values->counterrawid); |
39 | for (i = 0; i < values->counters; i++) | 39 | for (i = 0; i < values->counters; i++) |
40 | free(values->countername[i]); | 40 | zfree(&values->countername[i]); |
41 | free(values->countername); | 41 | zfree(&values->countername); |
42 | } | 42 | } |
43 | 43 | ||
44 | static void perf_read_values__enlarge_threads(struct perf_read_values *values) | 44 | static void perf_read_values__enlarge_threads(struct perf_read_values *values) |