Module Name:src
Committed By: martin
Date: Mon Nov 25 15:48:40 UTC 2019
Modified Files:
src/sys/kern [netbsd-7-0]: subr_cprng.c
Log Message:
Pull up following revision(s) (requested by riastradh in ticket #1714):
sys/kern/subr_cprng.c: revision 1.33
Use cprng_strong, not cprng_fast, for sysctl kern.arnd.
To generate a diff of this commit:
cvs rdiff -u -r1.24.2.1.2.1 -r1.24.2.1.2.2 src/sys/kern/subr_cprng.c
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/subr_cprng.c
diff -u src/sys/kern/subr_cprng.c:1.24.2.1.2.1 src/sys/kern/subr_cprng.c:1.24.2.1.2.2
--- src/sys/kern/subr_cprng.c:1.24.2.1.2.1 Tue Sep 3 12:30:46 2019
+++ src/sys/kern/subr_cprng.c Mon Nov 25 15:48:40 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: subr_cprng.c,v 1.24.2.1.2.1 2019/09/03 12:30:46 martin Exp $ */
+/* $NetBSD: subr_cprng.c,v 1.24.2.1.2.2 2019/11/25 15:48:40 martin Exp $ */
/*-
* Copyright (c) 2011-2013 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include
-__KERNEL_RCSID(0, "$NetBSD: subr_cprng.c,v 1.24.2.1.2.1 2019/09/03 12:30:46 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_cprng.c,v 1.24.2.1.2.2 2019/11/25 15:48:40 martin Exp $");
#include
#include
@@ -508,6 +508,7 @@ cprng_strong_rndsink_callback(void *cont
mutex_exit(>cs_lock);
}
+static ONCE_DECL(sysctl_prng_once);
static cprng_strong_t *sysctl_prng;
static int
@@ -527,10 +528,9 @@ makeprng(void)
static int
sysctl_kern_urnd(SYSCTLFN_ARGS)
{
- static ONCE_DECL(control);
int v, rv;
- RUN_ONCE(, makeprng);
+ RUN_ONCE(_prng_once, makeprng);
rv = cprng_strong(sysctl_prng, , sizeof(v), 0);
if (rv == sizeof(v)) {
struct sysctlnode node = *rnode;
@@ -559,6 +559,7 @@ sysctl_kern_arnd(SYSCTLFN_ARGS)
int error;
void *v;
struct sysctlnode node = *rnode;
+ size_t n __diagused;
switch (*oldlenp) {
case 0:
@@ -567,8 +568,10 @@ sysctl_kern_arnd(SYSCTLFN_ARGS)
if (*oldlenp > 256) {
return E2BIG;
}
+ RUN_ONCE(_prng_once, makeprng);
v = kmem_alloc(*oldlenp, KM_SLEEP);
- cprng_fast(v, *oldlenp);
+ n = cprng_strong(sysctl_prng, v, *oldlenp, 0);
+ KASSERT(n == *oldlenp);
node.sysctl_data = v;
node.sysctl_size = *oldlenp;
error = sysctl_lookup(SYSCTLFN_CALL());