summaryrefslogtreecommitdiffstats
path: root/sys/dev/random/yarrow.c
diff options
context:
space:
mode:
authormarkm <markm@FreeBSD.org>2003-11-17 23:02:21 +0000
committermarkm <markm@FreeBSD.org>2003-11-17 23:02:21 +0000
commitf9c943515638ad456438656dd3d79e6896d4089d (patch)
tree3d031ff4aa808b1f35307d1c7c1e8da496ee119c /sys/dev/random/yarrow.c
parentcc012e083576d0a4a3c5362245a17f627fbe19c4 (diff)
downloadFreeBSD-src-f9c943515638ad456438656dd3d79e6896d4089d.zip
FreeBSD-src-f9c943515638ad456438656dd3d79e6896d4089d.tar.gz
Overhaul the entropy device:
o Each source gets its own queue, which is a FIFO, not a ring buffer. The FIFOs are implemented with the sys/queue.h macros. The separation is so that a low entropy/high rate source can't swamp the harvester with low-grade entropy and destroy the reseeds. o Each FIFO is limited to 256 (set as a macro, so adjustable) events queueable. Full FIFOs are ignored by the harvester. This is to prevent memory wastage, and helps to keep the kernel thread CPU usage within reasonable limits. o There is no need to break up the event harvesting into ${burst} sized chunks, so retire that feature. o Break the device away from its roots with the memory device, and allow it to get its major number automagically.
Diffstat (limited to 'sys/dev/random/yarrow.c')
-rw-r--r--sys/dev/random/yarrow.c22
1 files changed, 3 insertions, 19 deletions
diff --git a/sys/dev/random/yarrow.c b/sys/dev/random/yarrow.c
index c721df7..9d4bf03 100644
--- a/sys/dev/random/yarrow.c
+++ b/sys/dev/random/yarrow.c
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 2000 Mark R V Murray
+ * Copyright (c) 2000, 2001, 2002, 2003 Mark R V Murray
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -29,12 +29,13 @@
__FBSDID("$FreeBSD$");
#include <sys/param.h>
-#include <sys/systm.h>
#include <sys/kernel.h>
#include <sys/lock.h>
+#include <sys/malloc.h>
#include <sys/mutex.h>
#include <sys/random.h>
#include <sys/sysctl.h>
+#include <sys/systm.h>
#include <crypto/rijndael/rijndael.h>
#include <crypto/sha2/sha2.h>
@@ -43,8 +44,6 @@ __FBSDID("$FreeBSD$");
#include <dev/random/randomdev.h>
#include <dev/random/yarrow.h>
-/* #define DEBUG */
-
RANDOM_CHECK_UINT(gengateinterval, 4, 64);
RANDOM_CHECK_UINT(bins, 2, 16);
RANDOM_CHECK_UINT(fastthresh, BLOCKSIZE/4, BLOCKSIZE);
@@ -164,10 +163,6 @@ reseed(u_int fastslow)
u_int i;
enum esource j;
-#ifdef DEBUG
- printf("Reseed type %d\n", fastslow);
-#endif
-
/* The reseed task must not be jumped on */
mtx_lock(&random_reseed_mtx);
@@ -240,10 +235,6 @@ reseed(u_int fastslow)
/* Release the reseed mutex */
mtx_unlock(&random_reseed_mtx);
-#ifdef DEBUG
- printf("Reseed finish\n");
-#endif
-
/* Unblock the device if it was blocked due to being unseeded */
random_unblock();
}
@@ -315,10 +306,6 @@ generator_gate(void)
u_int i;
u_char temp[KEYSIZE];
-#ifdef DEBUG
- printf("Generator gate\n");
-#endif
-
for (i = 0; i < KEYSIZE; i += sizeof(random_state.counter)) {
random_state.counter[0]++;
yarrow_encrypt(&random_state.key, random_state.counter,
@@ -328,9 +315,6 @@ generator_gate(void)
yarrow_encrypt_init(&random_state.key, temp);
memset((void *)temp, 0, KEYSIZE);
-#ifdef DEBUG
- printf("Generator gate finish\n");
-#endif
}
/* Helper routine to perform explicit reseeds */
OpenPOWER on IntegriCloud