perf expr: 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:06:11 +0000 (10:06 -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/expr.c

index bb6ddad..f4e5291 100644 (file)
@@ -86,8 +86,8 @@ void ids__free(struct hashmap *ids)
                return;
 
        hashmap__for_each_entry(ids, cur, bkt) {
-               free((void *)cur->pkey);
-               free((void *)cur->pvalue);
+               zfree(&cur->pkey);
+               zfree(&cur->pvalue);
        }
 
        hashmap__free(ids);
@@ -311,8 +311,8 @@ void expr__ctx_clear(struct expr_parse_ctx *ctx)
        size_t bkt;
 
        hashmap__for_each_entry(ctx->ids, cur, bkt) {
-               free((void *)cur->pkey);
-               free(cur->pvalue);
+               zfree(&cur->pkey);
+               zfree(&cur->pvalue);
        }
        hashmap__clear(ctx->ids);
 }
@@ -325,10 +325,10 @@ void expr__ctx_free(struct expr_parse_ctx *ctx)
        if (!ctx)
                return;
 
-       free(ctx->sctx.user_requested_cpu_list);
+       zfree(&ctx->sctx.user_requested_cpu_list);
        hashmap__for_each_entry(ctx->ids, cur, bkt) {
-               free((void *)cur->pkey);
-               free(cur->pvalue);
+               zfree(&cur->pkey);
+               zfree(&cur->pvalue);
        }
        hashmap__free(ctx->ids);
        free(ctx);