Push kernel lock down to sysctl(2).
authormvs <mvs@openbsd.org>
Fri, 2 Aug 2024 14:34:45 +0000 (14:34 +0000)
committermvs <mvs@openbsd.org>
Fri, 2 Aug 2024 14:34:45 +0000 (14:34 +0000)
commitd800346e491306778e611cfba8837aa35613dba7
tree882bbc6e26fb990ddf16ede77eecc71358a9a400
parent723f2f96faa6dadff19561449921d5b220fe085e
Push kernel lock down to sysctl(2).

Unlock few obvious immutable or read-only variables from "kern.*" and
"hw.*" paths. Keep the rest variables locked as before, include pages
wiring. Use new sysctl_vs{,un}lock() functions introduced for thar
purpose.

In kern.* path:

 - KERN_OSTYPE, KERN_OSRELEASE, KERN_OSVERSION, KERN_VERSION -
   immutable;
 - KERN_NUMVNODES - read-only access to integer;
 - KERN_MBSTAT - read-only access to per-CPU counters;

In hw.* path:

 - HW_MACHINE, HW_MODEL, HW_NCPUONLINE, HW_PHYSMEM, HW_VENDOR,
   HW_PRODUCT, HW_VERSION, HW_SERIALNO, HW_UUID, HW_PHYSMEM64 -
   immutable;
 - HW_USERMEM and HW_USERMEM64 - `physmem' is immutable, uvmexp.wired
   is mutable but integer; read-only access to localy stored difference
   between `physmem' and uvmexp.wired;
 - `hw_vars' - read-only access to integers; some of them like
   HW_BYTEORDER and HW_PAGESIZE are immutable;

ok bluhm kettenis
sys/kern/kern_sysctl.c
sys/kern/syscalls.master
sys/sys/sysctl.h