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

vkernel64: sys_umtx_sleep() calls blocking uservtophys() inside a critical section β€” LWKT lock-protocol violation

Field Value
ID DF-2958
Status new
Severity Low
CVSS 3.1 CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:L
CWE CWE-667 Improper Locking
File sys/kern/kern_umtx.c
Lines 199-216 (blocker: vkernel64/platform/pmap.c:366-392)
Area kern + vkernel64
Confidence likely
Discovered 2026-09-02
Pass 2 (GLM 5.3 second pass)
Bucket base:kern
Reported pending
Known CVE none
CVE match novel

Summary

On the vkernel64 platform, kern_umtx.c:216 re-resolves the physical address via uservtophys() INSIDE the crit_enter() begun at :199. The vkernel64 implementation calls vm_fault_page(..., VM_FAULT_NORMAL, ...), which blocks on non-resident/busy/COW pages. Blocking inside an LWKT critical section violates the core protocol ('This code can't block ... or bad things will happen') and can deadlock or trip the switch-from-critical-section assertions. The pc64 implementation is a lockless PTE read and is safe; only vkernel64 diverges. Unprivileged process inside a vkernel64 kernel triggers repeated blocking page faults from within a critical section (e.g. fork()/mprotect() COW break racing between the initial translation at :147 and the in-crit re-check at :216) under memory pressure β†’ vkernel panic/deadlock β€” availability only, vkernel64 deployments only. Not Phase-V verified (pc64 guest; nested vkernel disproportionate to a Low vkernel-only DoS). Fix: make vkernel64's uservtophys a non-blocking advisory translation matching pc64 semantics (row sketch).

Timeline

  • 2026-09-02 Discovered during pass-2 audit of kern_umtx.c (GLM 5.3).

Discussion (0)

No comments yet.