In the Linux kernel, the following vulnerability has been resolved:
PCI/DOE: Fix destroyworkon_stack() race
The following debug object splat was observed in testing:
ODEBUG: free active (active state 0) object: 0000000097d23782 object type: workstruct hint: doestatemachinework+0x0/0x510 WARNING: CPU: 1 PID: 71 at lib/debugobjects.c:514 debugprintobject+0x7d/0xb0 ... Workqueue: pci 0000:36:00.0 DOE [1 doestatemachinework RIP: 0010:debugprintobject+0x7d/0xb0 ... Call Trace: ? debugprintobject+0x7d/0xb0 ? _pfxdoestatemachinework+0x10/0x10 debugobjectfree.part.0+0x11b/0x150 doestatemachinework+0x45e/0x510 processone_work+0x1d4/0x3c0
This occurs because destroyworkonstack() was called after signaling the completion in the calling thread. This creates a race between destroyworkonstack() and the task->work struct going out of scope in pci_doe().
Signal the work complete after destroying the work struct. This is safe because signaltaskcomplete() is the final thing the work item does and the workqueue code is careful not to access the work struct after.
{
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2023/54xxx/CVE-2023-54235.json",
"cna_assigner": "Linux"
}