VI mailbox RCV interrupt enabled before flr_work is initialized β host-timed mailbox interrupt executes schedule_work() on an uninitialized (zeroed) work_struct β NULL function-pointer call β kernel panic
Summary
amdgpu_irq_get(rcv_irq) sets VALID_INT_EN at :600 nine lines before INIT_WORK(flr_work) at :609; a host/PF delivering IDH_FLR_NOTIFICATION in that window hits schedule_work on a zeroed work_struct - DFly workqueue shim executes func==NULL (linux_workqueue.c:89) = immediate guest panic. Carried from the Linux port. One-line reorder fix. SR-IOV hw-gated.
Discussion (0)
PoC verification
Evidence pack
findings/poc/DF-4755 Β· 1 files| File | Type | Description | Size | |
|---|---|---|---|---|
| verdict.json | file | 1.1 KB | view raw |
Fix verification
not_testableConfirmed kernel references
Detail
Exploit chain
host asserts mailbox RCV irq (src 135) right after guest VALID_INT_EN write; rcv_irq matches IDH_FLR_NOTIFICATION; schedule_work(&adev->virt.flr_work) with uninitialized work; process_all_work calls NULL func -> guest kernel panic
Evidence (decisive lines)
findings/poc/DF-4755/ (this verdict; reviewer notes in DF-4754 batch record)
Verdict
Source-certain init-ordering race, hardware-gated: requires an SR-IOV AMD VI VF (Tonga/Fiji) and a host/PF delivering the mailbox RCV interrupt in the window between amdgpu_irq_get(rcv_irq) at mxgpu_vi.c:600 (sets VALID_INT_EN) and INIT_WORK(flr_work) at :609 - schedule_work on the zeroed work_struct executes func==NULL via linux_workqueue.c:89. No SR-IOV AMD GPU on the QEMU guest, so runtime verification is not possible. Fix is a one-line reorder (INIT_WORK first), not yet build-validated.
No comments yet.