]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
perf trace: Avoid an ERR_PTR in syscall_stats
authorIan Rogers <irogers@google.com>
Mon, 2 Mar 2026 23:45:15 +0000 (15:45 -0800)
committerNamhyung Kim <namhyung@kernel.org>
Tue, 3 Mar 2026 01:13:19 +0000 (17:13 -0800)
hashmap__new may return an ERR_PTR and previously this would be
assigned to syscall_stats meaning all use of syscall_stats needs to
test for NULL (uninitialized) or an ERR_PTR. Given the only reason
hashmap__new can fail is ENOMEM, just use NULL to indicate the
allocation failure and avoid the code having to test for NULL and
IS_ERR.

Fixes: 96f202eab813 (perf trace: Fix IS_ERR() vs NULL check bug)
Signed-off-by: Ian Rogers <irogers@google.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
tools/perf/builtin-trace.c

index 295b272c6c2998a0b0568098150584ebed0dc225..7ff85fa90d988a2c888acac679599367849e0bd2 100644 (file)
@@ -1565,7 +1565,9 @@ static bool syscall_id_equal(long key1, long key2, void *ctx __maybe_unused)
 
 static struct hashmap *alloc_syscall_stats(void)
 {
-       return hashmap__new(syscall_id_hash, syscall_id_equal, NULL);
+       struct hashmap *result = hashmap__new(syscall_id_hash, syscall_id_equal, NULL);
+
+       return IS_ERR(result) ? NULL : result;
 }
 
 static void delete_syscall_stats(struct hashmap *syscall_stats)
@@ -1573,7 +1575,7 @@ static void delete_syscall_stats(struct hashmap *syscall_stats)
        struct hashmap_entry *pos;
        size_t bkt;
 
-       if (IS_ERR(syscall_stats))
+       if (!syscall_stats)
                return;
 
        hashmap__for_each_entry(syscall_stats, pos, bkt)
@@ -1589,7 +1591,7 @@ static struct thread_trace *thread_trace__new(struct trace *trace)
                ttrace->files.max = -1;
                if (trace->summary) {
                        ttrace->syscall_stats = alloc_syscall_stats();
-                       if (IS_ERR(ttrace->syscall_stats))
+                       if (!ttrace->syscall_stats)
                                zfree(&ttrace);
                }
        }
@@ -4464,7 +4466,7 @@ create_maps:
 
        if (trace->summary_mode == SUMMARY__BY_TOTAL && !trace->summary_bpf) {
                trace->syscall_stats = alloc_syscall_stats();
-               if (IS_ERR(trace->syscall_stats))
+               if (!trace->syscall_stats)
                        goto out_delete_evlist;
        }
 
@@ -4771,7 +4773,7 @@ static int trace__replay(struct trace *trace)
 
        if (trace->summary_mode == SUMMARY__BY_TOTAL) {
                trace->syscall_stats = alloc_syscall_stats();
-               if (IS_ERR(trace->syscall_stats))
+               if (!trace->syscall_stats)
                        goto out;
        }