vmm(4): wire faulted in pages
authormlarkin <mlarkin@openbsd.org>
Sat, 23 Jan 2021 22:34:46 +0000 (22:34 +0000)
committermlarkin <mlarkin@openbsd.org>
Sat, 23 Jan 2021 22:34:46 +0000 (22:34 +0000)
commit06c78a98acccbfb7384dd4393cc0d3064a653006
treeeb57129efeba57da6774d981e6460094a647ee60
parent2a5bbc1bf41ba8d6489a5145e7e755d23c08edd3
vmm(4): wire faulted in pages

This change wires the pages used by virtual machines managed by vmm(4).
When uvm swaps out a page, vmm(4) does not properly do TLB flushing,
possibly leading to memory corruption or improper page access later.

While this diff is not the correct fix (implementing proper TLB flush
semantics), it does work around the problem by not letting the pages
get swapped out in the first place.

This means that under memory pressure, swap pages will have to come
from other processes, and it also means you cannot overcommit vmm(4)
memory assignment (eg, assign more memory to VMs than you actually
have).

It is my plan to fix this the correct way, but that will take time.

This issue was originally pointed out a long time ago by Maxime V., but
due to my taking a year away from OpenBSD, the issue remained unfixed.
sys/arch/amd64/amd64/vmm.c