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

complete_rqe() raw-plex error path never biodone's the user bio nor frees the request β€” permanent unkillable I/O hang plus locked-buf/pbuf leak per errored plex I/O

Summary

When a raw-plex request finishes with error, the isplex branch sets B_ERROR/b_error and returns without biodone(ubio) or freerq(rq) (the success branch does both). The issuer sleeps forever with no timeout and no PCATCH (unkillable D-state); every rq leaks its BUF_LOCKed rqe buffers, malloced parity/data buffers and a pbuf - repeated errors exhaust the pbuf pool system-wide. Found during the vinumrequest.c pass-2 (defect lives in vinuminterrupt.c). Operator/root-gated or genuine hardware failure. Two-line biodone+freerq fix.

Discussion (0)

No comments yet.

PoC verification

Evidence pack

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

Fix verification

not_testable
baseline no→ patch + rebuild →patched clean

not_testable

fix in finding markdown
per-fix-DF-4481

Confirmed kernel references

Detail

Exploit chain

[]

Evidence (decisive lines)

Found during the vinumrequest.c pass-2 (cross-file: the isplex error branch lives in vinuminterrupt.c). biodone+freerq fix in finding markdown.

Verdict

not_run: md devices on guest cannot be made to fail I/O (no failure-injection facility); two-line certainty by inspection