β¬’ DragonFlyBSD Kernel Audit
← triage Β· dashboard
DF-4755

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)

No comments yet.

PoC verification

Evidence pack

findings/poc/DF-4755 Β· 1 files
FileTypeDescriptionSize
verdict.json file 1.1 KB view raw

Fix verification

not_testable
per-fix-DF-4755

Confirmed 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.