Remove the at-syscall-time check for msyscall(2)'s behaviour. msyscall(2)
authorderaadt <deraadt@openbsd.org>
Fri, 29 Mar 2024 06:47:05 +0000 (06:47 +0000)
committerderaadt <deraadt@openbsd.org>
Fri, 29 Mar 2024 06:47:05 +0000 (06:47 +0000)
commit861ef8390b8a203a888a41824d402fed95b8a243
tree75708c13e69fcac44efc2f0ad0c0d1ced8f18904
parentaaeda1815d4a6bf079707c3be8d94ae6fa4947df
Remove the at-syscall-time check for msyscall(2)'s behaviour.  msyscall(2)
was a big coding effort to ensure that system calls could only be performed
from static-binary/ld.so/libc.so/sigtramp regions of memory, by caching a
uvm entry with a serial number; new mmap/mprotect calls would increment
the map serial, and the entry would need to be looked up again.  So the
cost was O(1) in the usual case, but O(log n) with some locking if a map
change required a new lookup.
In the new world order, such regions are immutable so they cannot be
changed/split by mmap/mprotect; also we know the precise entry locations
of the syscalls due to system call pinning (ELF OPENBSD_SYSCALL and
pinsyscalls(2)), and this is all done as O(1) without any locking.

All the other parts of the subsystem will be ripped out but please
run a kernel with this before I make changes to ld.so..
ok kettenis
sys/sys/syscall_mi.h