]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
perf sched: Use thread__put() in free_idle_threads()
authorArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 5 Jun 2026 14:17:03 +0000 (11:17 -0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 5 Jun 2026 22:17:31 +0000 (19:17 -0300)
free_idle_threads() calls thread__delete() directly instead of
thread__put(), bypassing the reference counting lifecycle.  Under
REFCNT_CHECKING builds, this leaks the pointer handle since
thread__delete() frees the object without going through the refcount
wrapper.

The idle threads are created via thread__new() (refcount=1) in
get_idle_thread().  Callers get additional references via thread__get()
which they release with thread__put().  free_idle_threads() drops the
base reference — thread__put() is the correct call, matching the
thread__new() acquisition.

Fixes: 49394a2a24c7 ("perf sched timehist: Introduce timehist command")
Reported-by: sashiko-bot <sashiko-bot@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Assisted-by: Claude:claude-opus-4.6
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-sched.c

index c0cd3cbb602aa4c03f696d1d9ead7eb1fa2befee..732c65008a8a524013d6724a7c6250925b7c18f6 100644 (file)
@@ -2481,7 +2481,7 @@ static void free_idle_threads(void)
                        if (itr)
                                thread__put(itr->last_thread);
 
-                       thread__delete(idle);
+                       thread__put(idle);
                }
        }