Module Name:    src
Committed By:   christos
Date:           Sat Sep  9 16:01:09 UTC 2023

Modified Files:
        src/sys/kern: init_sysctl.c kern_sysctl.c
        src/sys/sys: systm.h

Log Message:
Move the initialization of the random hash for addresses earlier so that
it does not happen under a spin lock context (when it is first used).


To generate a diff of this commit:
cvs rdiff -u -r1.227 -r1.228 src/sys/kern/init_sysctl.c
cvs rdiff -u -r1.269 -r1.270 src/sys/kern/kern_sysctl.c
cvs rdiff -u -r1.304 -r1.305 src/sys/sys/systm.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/kern/init_sysctl.c
diff -u src/sys/kern/init_sysctl.c:1.227 src/sys/kern/init_sysctl.c:1.228
--- src/sys/kern/init_sysctl.c:1.227	Sun Sep 20 08:51:57 2020
+++ src/sys/kern/init_sysctl.c	Sat Sep  9 12:01:09 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: init_sysctl.c,v 1.227 2020/09/20 12:51:57 skrll Exp $ */
+/*	$NetBSD: init_sysctl.c,v 1.228 2023/09/09 16:01:09 christos Exp $ */
 
 /*-
  * Copyright (c) 2003, 2007, 2008, 2009 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: init_sysctl.c,v 1.227 2020/09/20 12:51:57 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: init_sysctl.c,v 1.228 2023/09/09 16:01:09 christos Exp $");
 
 #include "opt_sysv.h"
 #include "opt_compat_netbsd.h"
@@ -1065,6 +1065,8 @@ sysctl_kern_lwp(SYSCTLFN_ARGS)
 	int buflen, needed, error;
 	bool gotit;
 
+	hash_value_ensure_initialized();
+
 	if (namelen == 1 && name[0] == CTL_QUERY)
 		return (sysctl_query(SYSCTLFN_CALL(rnode)));
 

Index: src/sys/kern/kern_sysctl.c
diff -u src/sys/kern/kern_sysctl.c:1.269 src/sys/kern/kern_sysctl.c:1.270
--- src/sys/kern/kern_sysctl.c:1.269	Sun Apr  9 05:18:09 2023
+++ src/sys/kern/kern_sysctl.c	Sat Sep  9 12:01:09 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_sysctl.c,v 1.269 2023/04/09 09:18:09 riastradh Exp $	*/
+/*	$NetBSD: kern_sysctl.c,v 1.270 2023/09/09 16:01:09 christos Exp $	*/
 
 /*-
  * Copyright (c) 2003, 2007, 2008 The NetBSD Foundation, Inc.
@@ -70,7 +70,7 @@
 #define __COMPAT_SYSCTL
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_sysctl.c,v 1.269 2023/04/09 09:18:09 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_sysctl.c,v 1.270 2023/09/09 16:01:09 christos Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_defcorename.h"
@@ -2843,9 +2843,15 @@ random_address_init(void)
 }
 
 void
-hash_value(void *d, size_t ds, const void *s, size_t ss)
+hash_value_ensure_initialized(void)
 {
 
 	RUN_ONCE(&random_inithook, random_address_init);
+}
+
+void
+hash_value(void *d, size_t ds, const void *s, size_t ss)
+{
+
 	blake2s(d, ds, address_key, sizeof(address_key), s, ss);
 }

Index: src/sys/sys/systm.h
diff -u src/sys/sys/systm.h:1.304 src/sys/sys/systm.h:1.305
--- src/sys/sys/systm.h:1.304	Fri Sep  8 20:15:09 2023
+++ src/sys/sys/systm.h	Sat Sep  9 12:01:09 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: systm.h,v 1.304 2023/09/09 00:15:09 riastradh Exp $	*/
+/*	$NetBSD: systm.h,v 1.305 2023/09/09 16:01:09 christos Exp $	*/
 
 /*-
  * Copyright (c) 1982, 1988, 1991, 1993
@@ -235,6 +235,8 @@ enum hashtype {
 	} while (/*CONSTCOND*/0)
 
 void	hash_value(void *, size_t, const void *, size_t);
+void	hash_value_ensure_initialized(void);
+
 bool	get_expose_address(struct proc *);
 void	*hashinit(u_int, enum hashtype, bool, u_long *);
 void	hashdone(void *, enum hashtype, u_long);

Reply via email to