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