In the Linux kernel, the following vulnerability has been resolved:
tracing: Fix sleeping function called from invalid context on RT kernel
When setting bootparams="traceevent=initcall:initcallstart tpprintk=1" in the cmdline, the outputprintk() was called, and the spinlockirqsave() was called in the atomic and irq disable interrupt context suitation. On the PREEMPTRT kernel, these locks are replaced with sleepable rt-spinlock, so the stack calltrace will be triggered. Fix it by rawspinlockirqsave when PREEMPTRT and "traceevent=initcall:initcallstart tpprintk=1" enabled.
BUG: sleeping function called from invalid context at kernel/locking/spinlockrt.c:46 inatomic(): 1, irqsdisabled(): 0, nonblock: 0, pid: 1, name: swapper/0 preemptcount: 2, expected: 0 RCU nest depth: 0, expected: 0 Preemption disabled at: [<ffffffff8992303e>] trytowakeup+0x7e/0xba0 CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.17.1-rt17+ #19 34c5812404187a875f32bee7977f7367f9679ea7 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.14.0-2 04/01/2014 Call Trace: <TASK> dumpstacklvl+0x60/0x8c dumpstack+0x10/0x12 _mightresched.cold+0x11d/0x155 rtspinlock+0x40/0x70 traceeventbuffercommit+0x2fa/0x4c0 ? mapvsyscall+0x93/0x93 traceeventraweventinitcallstart+0xbe/0x110 ? perftraceinitcallfinish+0x210/0x210 ? probeschedwakeup+0x34/0x40 ? ttwudowakeup+0xda/0x310 ? tracehardirqson+0x35/0x170 ? mapvsyscall+0x93/0x93 dooneinitcall+0x217/0x3c0 ? traceeventraweventinitcalllevel+0x170/0x170 ? pushcpustop+0x400/0x400 ? cblistinitgeneric+0x241/0x290 kernelinitfreeable+0x1ac/0x347 ? _rawspinunlockirq+0x65/0x80 ? restinit+0xf0/0xf0 kernelinit+0x1e/0x150 retfromfork+0x22/0x30 </TASK>