From: Vitaliy Makkoveev Subject: Re: sysctl(2): make sysctl_int{,_lower}() mp-safe and unlock KERN_HOSTID To: "Lorenz (xha)" Cc: tech@openbsd.org Date: Tue, 13 Aug 2024 19:11:51 +0300 On Wed, Aug 14, 2024 at 06:58:37AM +0200, Lorenz (xha) wrote: > hi, > > On Tue, Aug 13, 2024 at 02:24:34PM +0300, Vitaliy Makkoveev wrote: > > Make sysctl_int() mp-safe in the sysctl_int_bounded() way and unlock > > KERN_HOSTID. Except bootstrap called clockattach() of sparc64, `hostid' > > never used outside kern_sysctl(). > > > > mp-safe sysctl_int() is meaningless for sysctl_int_lower(), so rework it > > too. This time all affected paths are kernel locked, but this doesn't > > make sysctl_int_lower() worse. > > > > ok? > > > > Index: sys/kern/kern_sysctl.c > > =================================================================== > > RCS file: /cvs/src/sys/kern/kern_sysctl.c,v > > diff -u -p -r1.437 kern_sysctl.c > > --- sys/kern/kern_sysctl.c 11 Aug 2024 15:10:53 -0000 1.437 > > +++ sys/kern/kern_sysctl.c 13 Aug 2024 11:03:24 -0000 > > @@ -507,6 +507,10 @@ kern_sysctl(int *name, u_int namelen, vo > > return (sysctl_rdstring(oldp, oldlenp, newp, version)); > > case KERN_NUMVNODES: /* XXX numvnodes is a long */ > > return (sysctl_rdint(oldp, oldlenp, newp, numvnodes)); > > + case KERN_HOSTID: > > + /* XXX assumes sizeof long >= sizeof int */ > > the C standard specifies that this is the case, for example in C99: > > 6.2.5 Types: "For any two integer types with the same signedness > and different integer conversion rank (see 6.3.2.1), the range of > values of the type with smaller integer conversion rank is a subrange > of the values of the other type." This is not about range.