perf trace: 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.
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 789eae7f
...@@ -2288,7 +2288,7 @@ static void syscall__exit(struct syscall *sc) ...@@ -2288,7 +2288,7 @@ static void syscall__exit(struct syscall *sc)
if (!sc) if (!sc)
return; return;
free(sc->arg_fmt); zfree(&sc->arg_fmt);
} }
static int trace__sys_enter(struct trace *trace, struct evsel *evsel, static int trace__sys_enter(struct trace *trace, struct evsel *evsel,
...@@ -3124,7 +3124,7 @@ static void evlist__free_syscall_tp_fields(struct evlist *evlist) ...@@ -3124,7 +3124,7 @@ static void evlist__free_syscall_tp_fields(struct evlist *evlist)
if (!et || !evsel->tp_format || strcmp(evsel->tp_format->system, "syscalls")) if (!et || !evsel->tp_format || strcmp(evsel->tp_format->system, "syscalls"))
continue; continue;
free(et->fmt); zfree(&et->fmt);
free(et); free(et);
} }
} }
...@@ -4670,11 +4670,11 @@ static void trace__exit(struct trace *trace) ...@@ -4670,11 +4670,11 @@ static void trace__exit(struct trace *trace)
int i; int i;
strlist__delete(trace->ev_qualifier); strlist__delete(trace->ev_qualifier);
free(trace->ev_qualifier_ids.entries); zfree(&trace->ev_qualifier_ids.entries);
if (trace->syscalls.table) { if (trace->syscalls.table) {
for (i = 0; i <= trace->sctbl->syscalls.max_id; i++) for (i = 0; i <= trace->sctbl->syscalls.max_id; i++)
syscall__exit(&trace->syscalls.table[i]); syscall__exit(&trace->syscalls.table[i]);
free(trace->syscalls.table); zfree(&trace->syscalls.table);
} }
syscalltbl__delete(trace->sctbl); syscalltbl__delete(trace->sctbl);
zfree(&trace->perfconfig_events); zfree(&trace->perfconfig_events);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment