DF-4518
vke_stop() teardown can hang the vkernel forever: the tx cothread's done-fifo full-wait never checks the exit flag, and once the exit flag is set vke_tx_intr() refuses to drain the done fifo, so cothread_delete()'s pthread_join blocks while holding if_serializer
Summary
The done-fifo full-wait never rechecks cotd_tx_exit; once teardown sets the exit flag, tx_intr returns BEFORE its drain loop, so nothing ever drains again - cothread_delete's pthread_join blocks while ifconfig's ioctl holds if_serializer, wedging the whole vkernel. Trigger: guest-unpriv packet flood + guest-root ifconfig down. Host-facing surface verified size-exact (no host-kernel impact). Exit-aware wait + drain-before-free fix.
Discussion (0)
PoC verification
Evidence pack
findings/poc/DF-4518 Β· 1 files| File | Type | Description | Size | |
|---|---|---|---|---|
| verdict.json | file | 1.1 KB | view raw |
Fix verification
not_testablebaseline noβ patch + rebuild βpatched clean
not_testable: no DRM device / vkernel disproportion
fix in finding markdown
per-fix-DF-4518
Confirmed kernel references
Detail
Exploit chain
[]
Evidence (decisive lines)
done-fifo full-wait never checks the exit flag and once exit is set tx_intr refuses to drain, so cothread_delete's pthread_join blocks while holding if_serializer. Exit-aware wait + drain-before-free fix.
Verdict
not_run: nested vkernel disproportionate for a Low vkernel-internal finding; logic source-complete
No comments yet.