]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-client.git/commit
tracing: Drain deferred trigger frees if kthread creation fails
authorWesley Atwell <atwellwea@gmail.com>
Tue, 24 Mar 2026 22:13:26 +0000 (16:13 -0600)
committerSteven Rostedt (Google) <rostedt@goodmis.org>
Sat, 28 Mar 2026 12:32:44 +0000 (08:32 -0400)
commit250ab25391edeeab8462b68be42e4904506c409c
tree1e8486c4194147b8c1496ba466c48e886994d326
parent1f9885732248d22f788e4992c739a98c88ab8a55
tracing: Drain deferred trigger frees if kthread creation fails

Boot-time trigger registration can fail before the trigger-data cleanup
kthread exists. Deferring those frees until late init is fine, but the
post-boot fallback must still drain the deferred list if kthread
creation never succeeds.

Otherwise, boot-deferred nodes can accumulate on
trigger_data_free_list, later frees fall back to synchronously freeing
only the current object, and the older queued entries are leaked
forever.

To trigger this, add the following to the kernel command line:

  trace_event=sched_switch trace_trigger=sched_switch.traceon,sched_switch.traceon

The second traceon trigger will fail and be freed. This triggers a NULL
pointer dereference and crashes the kernel.

Keep the deferred boot-time behavior, but when kthread creation fails,
drain the whole queued list synchronously. Do the same in the late-init
drain path so queued entries are not stranded there either.

Cc: stable@vger.kernel.org
Link: https://patch.msgid.link/20260324221326.1395799-3-atwellwea@gmail.com
Fixes: 61d445af0a7c ("tracing: Add bulk garbage collection of freeing event_trigger_data")
Signed-off-by: Wesley Atwell <atwellwea@gmail.com>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
kernel/trace/trace_events_trigger.c