In the Linux kernel, the following vulnerability has been resolved:
schedext: Fix invalid irq restore in scxops_bypass()
While adding outer irqsave/restore locking, 0e7ffff1b811 ("scx: Fix raciness in scxopsbypass()") forgot to convert an inner rqunlockirqrestore() to rq_unlock() which could re-enable IRQ prematurely leading to the following warning:
rawlocalirqrestore() called with IRQs enabled WARNING: CPU: 1 PID: 96 at kernel/locking/irqflag-debug.c:10 warnbogusirqrestore+0x30/0x40 ... Schedext: createdsq (enabling) pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) pc : warnbogusirqrestore+0x30/0x40 lr : warnbogusirqrestore+0x30/0x40 ... Call trace: warnbogusirqrestore+0x30/0x40 (P) warnbogusirqrestore+0x30/0x40 (L) scxopsbypass+0x224/0x3b8 scxopsenable.isra.0+0x2c8/0xaa8 bpfscxreg+0x18/0x30 ... irq event stamp: 33739 hardirqs last enabled at (33739): [<ffff8000800b699c>] scxopsbypass+0x174/0x3b8 hardirqs last disabled at (33738): [<ffff800080d48ad4>] rawspinlockirqsave+0xb4/0xd8
Drop the stray _irqrestore().
[
{
"signature_type": "Line",
"deprecated": false,
"id": "CVE-2024-57891-63e74c70",
"signature_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@786362ce60d79967875f43e0ba55ad7a5376c133",
"digest": {
"line_hashes": [
"247482124856869687812732564031364298067",
"159938720249671164136036292062280932140",
"183115593076830564691230557532815280161",
"287649549381677109655172740117874534171"
],
"threshold": 0.9
},
"target": {
"file": "kernel/sched/ext.c"
}
}
]