CVE-2026-97924: tracing/user_events: Don't destroy fields when event removal fails
In the Linux kernel, the following vulnerability has been resolved:
tracing/userevents: Don't destroy fields when event removal fails
destroyuserevent() destroys the event's fields before attempting to remove the trace event call. If usereventsetcallvisible() fails, e.g. because the event is still enabled and traceremoveeventcall() returns -EBUSY, the event is left registered with an irreversibly destroyed field list. Any subsequent interaction with the event then operates on an empty field list while it is still fully visible in tracefs.
Move the field destruction after the call removal, and splice the field list back onto the event when the removal fails so the event remains in a consistent state.
Affected Software
Event History
Frequently Asked Questions
What condition is required to trigger the inconsistent event state?
Removal of a user event must fail after destruction begins. The described example is an event that is still enabled, causing trace_remove_event_call() to return -EBUSY.
What is the impact if removal fails?
The event can remain registered and visible in tracefs while its field list has been irreversibly destroyed. Subsequent interactions with that event then operate on an empty field list despite the event remaining fully visible.
How does the fix prevent the issue?
The fix delays field destruction until after trace event call removal succeeds. If removal fails, it restores the field list to the event so that the registered event remains internally consistent.