From: Vitaliy Makkoveev Subject: sysctl(2): unlock KERN_BOOTTIME To: tech@openbsd.org Date: Mon, 5 Aug 2024 20:04:56 +0300 microboottime() and following binboottime() are mp-safe and `mb' is local data. Index: sys/kern/kern_sysctl.c =================================================================== RCS file: /cvs/src/sys/kern/kern_sysctl.c,v diff -u -p -r1.432 kern_sysctl.c --- sys/kern/kern_sysctl.c 5 Aug 2024 15:43:58 -0000 1.432 +++ sys/kern/kern_sysctl.c 5 Aug 2024 17:00:11 -0000 @@ -507,6 +507,12 @@ 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_BOOTTIME: { + struct timeval bt; + memset(&bt, 0, sizeof bt); + microboottime(&bt); + return (sysctl_rdstruct(oldp, oldlenp, newp, &bt, sizeof bt)); + } case KERN_MBSTAT: { extern struct cpumem *mbstat; uint64_t counters[MBSTAT_COUNT]; @@ -610,12 +616,6 @@ kern_sysctl_locked(int *name, u_int name return (error); case KERN_CLOCKRATE: return (sysctl_clockrate(oldp, oldlenp, newp)); - case KERN_BOOTTIME: { - struct timeval bt; - memset(&bt, 0, sizeof bt); - microboottime(&bt); - return (sysctl_rdstruct(oldp, oldlenp, newp, &bt, sizeof bt)); - } case KERN_MSGBUFSIZE: case KERN_CONSBUFSIZE: { struct msgbuf *mp;