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

Mailbox handshake busy-waits up to 12 seconds with mdelay() inside the hard-IRQ .process handler β€” host/PF can stall the guest in interrupt context per message

Summary

rcv_irq runs synchronously in the amdgpu_irq .process path and calls send_ack - a 12000 x mdelay(1) loop waiting for the host to clear RCV_MSG_VALID; a withholding PF freezes the guest interrupt context 12s per notification at irq-storm rate (watchdog territory). Same loops in init/flr_work contexts are merely sluggish. Guest-hardening grade; defer-ack-to-flr_work fix.

Discussion (0)

No comments yet.

PoC verification

Evidence pack

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

Fix verification

not_testable
per-fix-DF-4756

Confirmed kernel references

Detail

Exploit chain

host sends FLR notification and never clears RCV_MSG_VALID after guest ACK -> 12s hardirq busy-wait per delivery -> soft-lockup/watchdog guest DoS

Evidence (decisive lines)

findings/poc/DF-4756/ (this verdict; reviewer notes in DF-4754 batch record)

Verdict

Source-certain hardirq stall, hardware-gated: xgpu_vi_mailbox_rcv_irq runs in the amdgpu_irq .process path and synchronously calls xgpu_vi_mailbox_send_ack (mxgpu_vi.c:383) which busy-waits up to VI_MAILBOX_TIMEDOUT(12000) x mdelay(1) = 12s for the host to clear RCV_MSG_VALID - a withholding PF freezes the guest interrupt context 12s per notification, repeatable at irq-storm rate. No SR-IOV AMD hardware on guest. Fix: defer the ack handshake to the already-existing flr_work (peek instead of recv) or cap the inline wait.