perf pmu: 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:02:26 +0000 (10:02 -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/util/pmu.c

index 91cccfb..0153330 100644 (file)
@@ -972,8 +972,7 @@ static struct perf_pmu *pmu_lookup(int dirfd, const char *lookup_name)
 
        return pmu;
 err:
-       if (pmu->name)
-               free(pmu->name);
+       zfree(&pmu->name);
        free(pmu);
        return NULL;
 }
@@ -1519,7 +1518,7 @@ void perf_pmu__del_formats(struct list_head *formats)
 
        list_for_each_entry_safe(fmt, tmp, formats, list) {
                list_del(&fmt->list);
-               free(fmt->name);
+               zfree(&fmt->name);
                free(fmt);
        }
 }
@@ -1866,8 +1865,8 @@ static void perf_pmu__del_caps(struct perf_pmu *pmu)
 
        list_for_each_entry_safe(caps, tmp, &pmu->caps, list) {
                list_del(&caps->list);
-               free(caps->name);
-               free(caps->value);
+               zfree(&caps->name);
+               zfree(&caps->value);
                free(caps);
        }
 }
@@ -2089,9 +2088,9 @@ static void perf_pmu__delete(struct perf_pmu *pmu)
 
        perf_cpu_map__put(pmu->cpus);
 
-       free(pmu->default_config);
-       free(pmu->name);
-       free(pmu->alias_name);
+       zfree(&pmu->default_config);
+       zfree(&pmu->name);
+       zfree(&pmu->alias_name);
        free(pmu);
 }