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)
PoC verification
Evidence pack
findings/poc/DF-5589 Β· 1 files| File | Type | Description | Size | |
|---|---|---|---|---|
| verdict.json | file | 1.1 KB | view raw |
Fix verification
not_testableConfirmed 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)
No comments yet.