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

pmap_inval.c discards every madvise()/vmspace_mcontrol() return value β€” the vkernel's sole memory-revocation primitive fails silently, leaving stale (possibly writable) host PTEs with no diagnostic

Summary

All six invalidation wrappers issue the host-syscall flush and ignore its result - but the host pmap_remove behind MADV_INVAL is the ONLY mechanism enforcing guest-kernel memory revocation (mprotect write-removal, munmap, COW demotion) against guest userland: a failure leaves the guest kernel believing memory is unmapped/write-protected while host CPUs keep a live translation. Proven unreachable today (guest/host VM_MAX_USER_ADDRESS bit-identical and 2MB-aligned so EINVAL checks pass; ENOENT only during vmspace destroy when no live ptes remain) - Info hardening; any future failure would be a silent write-protect/unmap bypass with zero diagnostics. retry-EINTR + panic-on-failure fix proposed. Negative results carried: no DF-5420 twin (no mask state machine - this shim delegates synchronously to the host), no DF-5586 analog on these paths (signal deferral gated), VPTE_PS never set so pmap_inval_pde is dead code (pmap_clean_pde unimplemented with #if 0 callers - latent trap only).

Discussion (0)

No comments yet.

PoC verification

Evidence pack

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

Fix verification

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

Confirmed kernel references

Detail

Evidence (decisive lines)

static: 15 ignored-return sites traced line-by-line; both host syscall implementations audited for reachable failure modes

Verified recommended fix

retry EINTR + panic on flush failure

Verdict

untested (Info hardening; no runnable failure path on the current guest/host contract - proven unreachable rather than untested)