From: Arnaldo Carvalho de Melo Date: Wed, 12 Apr 2023 12:50:08 +0000 (-0300) Subject: perf pmu: Use zfree() to reduce chances of use after free X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=efe98a7a39777ce266142159f303fb52c3b817c0;p=linux.git perf pmu: 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: Arnaldo Carvalho de Melo --- diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index 91cccfb3c5159..01533302d5f95 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -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); }