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

Uninterruptible multi-second waits and 750ms DELAY busy-spin held under dev_lock in the TIS transmit path (DF-1991's TIS twin plus a new busy-wait): 40s unkillable sleep for user-chosen Create* command codes, ~750ms+ CPU spin per burst on a stalled TPM

Summary

dev_lock held across a 750,000-iteration DELAY(1)+MMIO busy-spin per burst chunk AND PCATCH-less tsleeps up to the command timeout - which is selected from the fully user-chosen command code: Create* codes pin the thread unkillable for 40s under dev_lock, starving all cdev users and shutdown. TIS twin of DF-1991 + the new busy-spin. PCATCH + yield-polling fix.

Discussion (0)

No comments yet.

PoC verification

Evidence pack

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

Fix verification

not_testable
per-fix-DF-4860

Confirmed kernel references

Detail

Exploit chain

root writes a Create*-coded command against a stalled TPM -> 40s unkillable D-state under dev_lock + ~750ms CPU spin per burst -> cdev and shutdown starvation

Evidence (decisive lines)

findings/poc/DF-4860/ (this verdict)

Verdict

Hardware-gated: the TIS transmit path holds dev_lock exclusively and (1) busy-spins up to 750,000 DELAY(1)+MMIO iterations per burst chunk in wait_for_burst (~750ms+ CPU, multiplied by alternating burst=0 stalls), and (2) tsleeps WITHOUT PCATCH for up to the command timeout - which tpm20_get_timeout selects from the FULLY USER-CHOSEN command code: any TPM_CC_Create/CreatePrimary/CreateLoaded pins the thread unkillable in D-state for 40s while holding dev_lock, starving all other /dev/tpm0 users and shutdown. The TIS twin of DF-1991 plus the new busy-spin detail. Root/wheel cdev or hostile TPM. PCATCH + yield-style burst polling fix.