]> git.ipfire.org Git - thirdparty/kernel/stable.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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 19 Sep 2023 10:22:56 +0000 (12:22 +0200)
[ Upstream commit 9997d5dd177c52017fa0541bf236a4232c8148e6 ]

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>
Stable-dep-of: 7962ef13651a ("perf trace: Really free the evsel->priv area")
Signed-off-by: Sasha Levin <sashal@kernel.org>
tools/perf/builtin-trace.c

index d9ea546850cd65191f5e8065ebbf90c5e9e50c86..d912dc878a6e9a2aae9b4c18649a5614e690e763 100644 (file)
@@ -2287,7 +2287,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,
@@ -3129,7 +3129,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);
        }
 }
@@ -4748,11 +4748,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);