Use atomic operations to access integers in sysctl(2).
authorbluhm <bluhm@openbsd.org>
Thu, 11 Jul 2024 14:11:55 +0000 (14:11 +0000)
committerbluhm <bluhm@openbsd.org>
Thu, 11 Jul 2024 14:11:55 +0000 (14:11 +0000)
commit4ff46a56af9c8a296c6e0e4e6a8377dfaf1bd849
tree1677ca5ddfefec946a1d4b2743e4b19bb0865828
parent9791a9c53bac18b903663aae776de0cb76b3663a
Use atomic operations to access integers in sysctl(2).

In sysctl_int_bounded() use atomic operations to load, store, or
swap integer values.  By using volatile pointers this will result
in a single assembly instruction, no matter how over optimizing
compilers will become.  Note that this does not solve data dependency
problems, nor MP problems in the kernel code using these integers.
For full MP safety additional considerations, memory barriers, or
locks will be needed where the values are used.  But for simple
integer in- and output volatile is enough.  If new and old value
pointers are given to sysctl, atomic swapping guarantees that
userlands sees the same old value only once.  There are more
sysctl_int() functions that have to be adapted.

OK deraadt@ kettenis@
sys/kern/kern_sysctl.c