Index | Thread | Search

From:
Vitaliy Makkoveev <mvs@openbsd.org>
Subject:
sysctl(2): unlock KERN_BOOTTIME
To:
tech@openbsd.org
Date:
Mon, 5 Aug 2024 20:04:56 +0300

Download raw body.

Thread
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;