During the MAP_STACK introduction in 2018, sigaltstack() became a
authorderaadt <deraadt@openbsd.org>
Sat, 15 Oct 2022 03:23:50 +0000 (03:23 +0000)
committerderaadt <deraadt@openbsd.org>
Sat, 15 Oct 2022 03:23:50 +0000 (03:23 +0000)
commitf9f6c84a4577744e6a7bf42bba18f1b6c98c06a9
treeffc46352f86ac21eea9aaa9f12e743dcdeb08914
parent95f9d6eb0e8b0e7f7d5f7c29069ee7c23977d94d
During the MAP_STACK introduction in 2018, sigaltstack() became a
problem because haphazard use could shoot holes in the address space
(changing permissions, providing opportunities for pivoting, etc). I
tried to write a diff to convert the address space correctly but did
not understand enough about map entries, so instead we mapped new
memory over top of the existing object.  Placing a new mapping becomes
unfeasible with the upcoming mimmutable model, so here is code that
adds MAP_STACK to the region.  It will only do so for a contigiously
mapped region that is non-syscall with permission RW, otherwise it
returns an error.
Food for thought: If we know the object isn't service by an object,
we should consider zero'ing the region, to block pre-pivot placement?
ok kettenis
sys/kern/kern_sig.c
sys/uvm/uvm_map.c
sys/uvm/uvm_map.h