Module Name:    src
Committed By:   tls
Date:           Thu Aug 29 01:04:49 UTC 2013

Modified Files:
        src/sys/kern: kern_rndpool.c kern_rndq.c
        src/sys/sys: rnd.h

Log Message:
Fix rnd_add_* to conform to manual page: allow addition of entropy
with NULL source.


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/kern/kern_rndpool.c
cvs rdiff -u -r1.20 -r1.21 src/sys/kern/kern_rndq.c
cvs rdiff -u -r1.39 -r1.40 src/sys/sys/rnd.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/kern_rndpool.c
diff -u src/sys/kern/kern_rndpool.c:1.4 src/sys/kern/kern_rndpool.c:1.5
--- src/sys/kern/kern_rndpool.c:1.4	Thu Jun 13 19:18:00 2013
+++ src/sys/kern/kern_rndpool.c	Thu Aug 29 01:04:49 2013
@@ -1,4 +1,4 @@
-/*      $NetBSD: kern_rndpool.c,v 1.4 2013/06/13 19:18:00 tls Exp $        */
+/*      $NetBSD: kern_rndpool.c,v 1.5 2013/08/29 01:04:49 tls Exp $        */
 
 /*-
  * Copyright (c) 1997 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_rndpool.c,v 1.4 2013/06/13 19:18:00 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_rndpool.c,v 1.5 2013/08/29 01:04:49 tls Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -187,15 +187,16 @@ rndpool_add_one_word(rndpool_t *rp, u_in
  * Add a buffer's worth of data to the pool.
  */
 void
-rndpool_add_data(rndpool_t *rp, void *p, u_int32_t len, u_int32_t entropy)
+rndpool_add_data(rndpool_t *rp,
+		 const void * const p, u_int32_t len, u_int32_t entropy)
 {
 	u_int32_t val;
-	u_int8_t *buf;
+	const u_int8_t * buf;
 
 	buf = p;
 
 	for (; len > 3; len -= 4) {
-		val = *((u_int32_t *)buf);
+		val = *((const u_int32_t *)buf);
 
 		rndpool_add_one_word(rp, val);
 		buf += 4;

Index: src/sys/kern/kern_rndq.c
diff -u src/sys/kern/kern_rndq.c:1.20 src/sys/kern/kern_rndq.c:1.21
--- src/sys/kern/kern_rndq.c:1.20	Wed Aug 28 23:40:43 2013
+++ src/sys/kern/kern_rndq.c	Thu Aug 29 01:04:49 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_rndq.c,v 1.20 2013/08/28 23:40:43 tls Exp $	*/
+/*	$NetBSD: kern_rndq.c,v 1.21 2013/08/29 01:04:49 tls Exp $	*/
 
 /*-
  * Copyright (c) 1997-2013 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_rndq.c,v 1.20 2013/08/28 23:40:43 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_rndq.c,v 1.21 2013/08/29 01:04:49 tls Exp $");
 
 #include <sys/param.h>
 #include <sys/ioctl.h>
@@ -651,7 +651,13 @@ rnd_add_data(krndsource_t *rs, const voi
 	 * itself, random.  Don't estimate entropy based on
 	 * timestamp, just directly add the data.
 	 */
-	rnd_add_data_ts(rs, data, len, entropy, rnd_counter());
+	if (__predict_false(rs == NULL)) {
+		mutex_spin_enter(&rndpool_mtx);
+		rndpool_add_data(&rnd_pool, data, len, entropy);
+		mutex_spin_exit(&rndpool_mtx);
+	} else {
+		rnd_add_data_ts(rs, data, len, entropy, rnd_counter());
+	}
 }
 
 static void

Index: src/sys/sys/rnd.h
diff -u src/sys/sys/rnd.h:1.39 src/sys/sys/rnd.h:1.40
--- src/sys/sys/rnd.h:1.39	Mon Jul  1 15:22:00 2013
+++ src/sys/sys/rnd.h	Thu Aug 29 01:04:49 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: rnd.h,v 1.39 2013/07/01 15:22:00 riastradh Exp $	*/
+/*	$NetBSD: rnd.h,v 1.40 2013/08/29 01:04:49 tls Exp $	*/
 
 /*-
  * Copyright (c) 1997 The NetBSD Foundation, Inc.
@@ -155,7 +155,8 @@ void		rndpool_get_stats(rndpool_t *, voi
 void		rndpool_increment_entropy_count(rndpool_t *, uint32_t);
 uint32_t	*rndpool_get_pool(rndpool_t *);
 uint32_t	rndpool_get_poolsize(void);
-void		rndpool_add_data(rndpool_t *, void *, uint32_t, uint32_t);
+void		rndpool_add_data(rndpool_t *,
+				 const void *const , uint32_t, uint32_t);
 uint32_t	rndpool_extract_data(rndpool_t *, void *, uint32_t, uint32_t);
 void		rnd_init(void);
 void		rnd_init_softint(void);
@@ -173,8 +174,10 @@ void		rnd_seed(void *, size_t);
 static inline void
 rnd_add_uint32(krndsource_t *kr, uint32_t val)
 {
-	if (RND_ENABLED(kr)) {
+	if (__predict_true(kr) && RND_ENABLED(kr)) {
 		_rnd_add_uint32(kr, val);
+	} else {
+		rnd_add_data(NULL, &val, sizeof(val), 0);
 	}
 }
 

Reply via email to