Index | Thread | Search

From:
Alexander Bluhm <bluhm@openbsd.org>
Subject:
Re: sysctl(2): unlock KERN_BOOTTIME
To:
Vitaliy Makkoveev <mvs@openbsd.org>
Cc:
tech@openbsd.org
Date:
Mon, 5 Aug 2024 19:37:04 +0200

Download raw body.

Thread
On Mon, Aug 05, 2024 at 08:04:56PM +0300, Vitaliy Makkoveev wrote:
> microboottime() and following binboottime() are mp-safe and `mb' is
> local data.

OK bluhm@

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