perf evsel: 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 13:03:37 +0000 (10:03 -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.

Also remove one NULL test before free(), as it accepts a NULL arg and we
get one line shaved not doing it explicitely.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/evsel.c

index fe3ce765a4f3a9b4d7f179bd11d7add7705802f6..a85a987128aad281188010d8798dfb73cb7406af 100644 (file)
@@ -2917,8 +2917,7 @@ bool evsel__fallback(struct evsel *evsel, int err, char *msg, size_t msgsize)
                if (asprintf(&new_name, "%s%su", name, sep) < 0)
                        return false;
 
-               if (evsel->name)
-                       free(evsel->name);
+               free(evsel->name);
                evsel->name = new_name;
                scnprintf(msg, msgsize, "kernel.perf_event_paranoid=%d, trying "
                          "to fall back to excluding kernel and hypervisor "
@@ -3156,7 +3155,7 @@ void evsel__zero_per_pkg(struct evsel *evsel)
 
        if (evsel->per_pkg_mask) {
                hashmap__for_each_entry(evsel->per_pkg_mask, cur, bkt)
-                       free((void *)cur->pkey);
+                       zfree(&cur->pkey);
 
                hashmap__clear(evsel->per_pkg_mask);
        }