Unwire with map lock held
authorkn <kn@openbsd.org>
Mon, 14 Feb 2022 21:11:02 +0000 (21:11 +0000)
committerkn <kn@openbsd.org>
Mon, 14 Feb 2022 21:11:02 +0000 (21:11 +0000)
commit11816c5585352dffa7bdfcbe73dd0f768d3d5767
tree7f45bdb65081190bac4d85f55db1b27a50d75153
parent152b4c217fea2daa5b2f4f99307ba7c2c16977da
Unwire with map lock held

This is an updated version of uvm_map.c r1.283 "Unwire with map lock held".

The previous version introduced a use-after-free by not unlocking vm_map
locks in uvm_map_teardown(), resulting in dangling references on the
reaper's lock list (thanks visa!).

Lock and unlock the map in around uvm_map_teardown() instead.
This code path holds the last reference, hence the lock isn't strictly
needed except for satisfying upcoming locking assertions.

Tested on amd64, arm64, i386, macppc, octeon, sparc64.
This time also with WITNESS enabled (except on sparc64 which builds but does
not boot with WITNESS;  this is a known issue).

OK mpi visa
sys/uvm/uvm_map.c