]> xenbits.xensource.com Git - people/jgross/linux.git/commitdiff
perf trace: Use zfree() to reduce chances of use after free
authorArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 12 Apr 2023 12:50:08 +0000 (09:50 -0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 12 Apr 2023 12:54:32 +0000 (09:54 -0300)
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: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-trace.c

index 72ef0bebb06b1347d645a0ce3ff4e1f6d8bf419d..8ee3a45c3c54d27e775ea11a6d90e43857878dae 100644 (file)
@@ -2288,7 +2288,7 @@ static void syscall__exit(struct syscall *sc)
        if (!sc)
                return;
 
-       free(sc->arg_fmt);
+       zfree(&sc->arg_fmt);
 }
 
 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)
                if (!et || !evsel->tp_format || strcmp(evsel->tp_format->system, "syscalls"))
                        continue;
 
-               free(et->fmt);
+               zfree(&et->fmt);
                free(et);
        }
 }
@@ -4670,11 +4670,11 @@ static void trace__exit(struct trace *trace)
        int i;
 
        strlist__delete(trace->ev_qualifier);
-       free(trace->ev_qualifier_ids.entries);
+       zfree(&trace->ev_qualifier_ids.entries);
        if (trace->syscalls.table) {
                for (i = 0; i <= trace->sctbl->syscalls.max_id; i++)
                        syscall__exit(&trace->syscalls.table[i]);
-               free(trace->syscalls.table);
+               zfree(&trace->syscalls.table);
        }
        syscalltbl__delete(trace->sctbl);
        zfree(&trace->perfconfig_events);