CVE-2026-74636: tracing: Fix race between update_event_fields and, event_define_fields
In the Linux kernel, the following vulnerability has been resolved:
tracing: Fix race between updateeventfields and, eventdefinefields
The following sequence may leads race between eventdefinefields() and updateeventfields():
CPU0 (loads module A) CPU1 (loads module B) =============================== =============================== loadmodule(A) loadmodule(B) notifiercallchain notifiercallchain tracemodulenotify tracemodulenotify mutexlock(&eventmutex) traceeventupdateall() tracemoduleaddevents(A) downwrite(&traceeventsem) registerevent(callA) addeventtotracers(callA) eventdefinefields(callA) for each f: listforeachentry(field, listadd(&f->link, &class->fields, link) &class->fields) field = class->fields->next;
Where access to the class->fields is not protected by the eventmutex in traceeventupdateall().
This produces the following panic: Unable to handle kernel access ... at virtual address 0000000000000018 pc : updateeventfields+0xf8/0x368 Call trace: updateeventfields+0xf8/0x368 traceeventupdateall+0x7c/0x2b4 tracemodulenotify+0x4c/0x1dc notifiercallchain+0x84/0x168 blockingnotifiercallchainrobust+0x64/0xd4 loadmodule+0x10c8/0x123c arm64sysfinitmodule+0x230/0x31c
Fix by taking eventmutex in traceeventupdateall() before traceeventsem.