diff options
author | markm <markm@FreeBSD.org> | 2003-11-17 23:02:21 +0000 |
---|---|---|
committer | markm <markm@FreeBSD.org> | 2003-11-17 23:02:21 +0000 |
commit | f9c943515638ad456438656dd3d79e6896d4089d (patch) | |
tree | 3d031ff4aa808b1f35307d1c7c1e8da496ee119c /sys/dev/random/yarrow.c | |
parent | cc012e083576d0a4a3c5362245a17f627fbe19c4 (diff) | |
download | FreeBSD-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.c | 22 |
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 */ |