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