Hold a read lock on the map while copying out data during a sysctl(2) call
authorkettenis <kettenis@openbsd.org>
Fri, 11 Mar 2022 19:24:19 +0000 (19:24 +0000)
committerkettenis <kettenis@openbsd.org>
Fri, 11 Mar 2022 19:24:19 +0000 (19:24 +0000)
commit5f69141a284a641310e0943fa09c7abc6a059175
tree2ee2974653278f60a4149a54bedf5ad8b1c57ded
parent9d920c79bf2dc7d3466d2fc16d1eaf7079238b66
Hold a read lock on the map while copying out data during a sysctl(2) call
to prevent another thread from unmapping the memory and triggering
an assertion or even corrupting random physical memory pages.

This fix is similar to the change in uvm_glue.c rev. 1.74.  However in this
case we need to be careful since some sysctl(2) calls look at the map of
the current process.  In those cases we must not attempt to lock the map
again.

ok mpi@

Should fix:
Reported-by: syzbot+be89fe83d6c004fcb412@syzkaller.appspotmail.com
sys/uvm/uvm_extern.h
sys/uvm/uvm_glue.c
sys/uvm/uvm_io.c
sys/uvm/uvm_map.c
sys/uvm/uvm_map.h