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

xhci_check_transfer decodes a stream ID from the completion TRB, which per xHCI spec carries none β€” completions on streams endpoints are silently dropped (transfer hang/DoS)

Summary

Transfer-event dwTrb2 bits are remainder/completion-code, not a stream ID (xHCI 1.0 4.11.5.2): the decoded garbage >= XHCI_MAX_STREAMS is silently dropped (or scans the wrong stream then dropped) - in-flight transfers stall until timeout, streams I/O wedges. Requires non-default hw.usb.xhci.streams=1 + SS bulk + USB_FS_OPEN_STREAM; memory-safe (indices bounded, td-address match). Upstream fixed by FreeBSD commit 253c93f26bcf (absent here). stream_id=0 + scan-all-streams fix.

Discussion (0)

No comments yet.

PoC verification

Evidence pack

findings/poc/DF-5269 Β· 1 files
FileTypeDescriptionSize
verdict.json file 1018 B view raw

Fix verification

not_testable
baseline no→ patch + rebuild →patched clean
per-fix-DF-5269

Confirmed kernel references

Detail

Evidence (decisive lines)

static trace + upstream fix-commit cross-reference

Verified recommended fix

see finding markdown

Verdict

untested (Low; streams mode off-by-default / QEMU xhci ignores TD Size - manifests only on real silicon per upstream reports)