diff options
Diffstat (limited to 'drivers/char')
| -rw-r--r-- | drivers/char/random.c | 153 | 
1 files changed, 10 insertions, 143 deletions
diff --git a/drivers/char/random.c b/drivers/char/random.c index 7637412..eed48e0 100644 --- a/drivers/char/random.c +++ b/drivers/char/random.c @@ -72,17 +72,6 @@   * pools are similar in structure but serve different purposes.   */ -#ifdef OVERCOMPLICATED -/* - * Here is a block diagram: - * - *  fast      fast                   devrandom - * events --> pool --\   input   /---> pool --> /dev/random - *                    --> pool -- - * slower, larger    /           \     PRNG - * events ----------/             \--> pool --> /dev/urandom - */ -#else  /*   * Here is a block diagram:   * @@ -92,7 +81,6 @@   * slower, larger    /           \     PRNG   * events ----------/             \--> pool --> /dev/urandom   */ -#endif  /*   * The fast pool is similar in function to the input pool, as @@ -323,11 +311,12 @@   * start-ups.  To do this, put the following lines an appropriate   * script which is run during the boot sequence: - * The byte count of 512 is overkill in the OVERCOMPLICATED - * implementation, since we only use it to reseed pools that are 4x - * smaller than that.  We preserve it because (a) it is - * traditional, and (b) it is the right value for the non-OVERCOMPLICATED - * design, where the input pool is being reseeded. + * The byte count of 512 a factor of 4 more than is needed to reseed + * the PRNG.  It is just right for reseeding the input pool, but one + * could argue that it doesn't need to be reseeded at all.  We + * preserve the 512 recommendation because it is traditional, because + * it is mostly harmless, and because it might come in handy at some + * point in the future.   *	echo "Initializing random number generator..."   *	random_seed=/var/run/random-seed @@ -357,25 +346,7 @@   * scripts, such code fragments would be found in   * /etc/rc.d/init.d/random.  On older Linux systems, the correct script   * location might be in /etc/rcb.d/rc.local or /etc/rc.d/rc.0. - */ -#ifdef OVERCOMPLICATED -/* - * Effectively, these commands save a pseudorandomly-distribted seed - * and then use that to initialize the prng pool -- and the devrandom - * pool -- at the next start-up.  (The seed is saved by the bootup - * script, not only by the shutdown script, to make sure that - * /etc/random-seed is never re-used.  It must be different for every - * start-up, even if the system crashes without executing rc.0.)  Even - * with complete knowledge of the start-up activities, predicting the - * state of the output pools requires knowledge of the previous - * history of the system. - - * Note that writing to /dev/urandom affects only the devrandom pool - * and prng pool (not the input pool or fast pool). - */ -#else -/*   * Effectively, these commands save a pseudorandomly-distribted seed   * and then use that to initialize the prng pool -- and the input   * pool -- at the next start-up.  (The seed is saved by the bootup @@ -388,9 +359,7 @@   * Note that writing to /dev/urandom affects only the input pool   * and prng pool (not the fast pool). - */ -#endif -/* +   * Writing to /dev/random is identical to writing to /dev/urandom.   * Configuring the /dev/random driver under Linux @@ -467,7 +436,7 @@  #define SEC_XFER_SIZE 512  #define EXTRACT_SIZE 10  #ifdef OVERCOMPLICATED -/* Three fills of size BUFFILL_ZONE is more than enough +/* Three fills of size BUFFILL_ZONE would be more than enough   * to fill the output buffer */  #  define BUFFILL_ZONE 400      /* measured in bits */  #endif @@ -654,7 +623,6 @@ module_param(debug, bool, 0644);   *   **********************************************************************/ -struct Pool;  struct Pool {  	/* read-only data: */  	struct poolinfo *poolinfo; @@ -677,9 +645,6 @@ struct Pool {  };  static __u32 input_pool_data[INPUT_POOL_WORDS]; -#ifdef OVERCOMPLICATED -static __u32 devrand_pool_data[OUTPUT_POOL_WORDS]; -#endif  static __u32 prng_pool_data[OUTPUT_POOL_WORDS];  static struct Pool input_pool = { @@ -691,18 +656,7 @@ static struct Pool input_pool = {  	.pooldata = input_pool_data  }; -#ifdef OVERCOMPLICATED -static struct Pool devrand_pool = { -	.poolinfo = &poolinfo_table[1], -	.name = "blocking", -	.blockable = 1, -	.pull = &input_pool, -	.lock = __SPIN_LOCK_UNLOCKED(devrand_pool.lock), -	.pooldata = devrand_pool_data -}; -#else  #define devrand_pool input_pool -#endif  static struct Pool prng_pool = {  	.poolinfo = &poolinfo_table[1], @@ -1539,16 +1493,6 @@ random_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos)  	ssize_t n, retval = 0, count = 0;  	if (nbytes == 0){ -#ifdef OVERCOMPLICATED -/* - * Kludge: zero-byte read:  Fill the pool from upstream sources. - * Problem: this doesn't happen often enough. - * You can make it happen from userland, but that's a kludge, - * suitable for testing ideas, but not a long-term solution. - */ - -                fill_pool(&devrand_pool, 0); -#endif  		return 0;          } @@ -1668,11 +1612,7 @@ static long random_ioctl(struct file *f, unsigned int cmd, unsigned long arg)  	switch (cmd) {  	case RNDGETENTCNT:  		/* inherently racy, no point locking */ -		if (put_user(input_pool.entropy_count -#ifdef OVERCOMPLICATED -                        + devrand_pool.entropy_count -#endif -                        , p)) +		if (put_user(input_pool.entropy_count, p))  			return -EFAULT;  		return 0;  	case RNDADDTOENTCNT: @@ -1806,11 +1746,7 @@ static int proc_do_uuid(struct ctl_table *table, int write,  static int total_entropy_count;  static int sum_entropy_count(struct ctl_table *table, int write,  			void __user *buffer, size_t *lenp, loff_t *ppos){ -        total_entropy_count = input_pool.entropy_count -#ifdef OVERCOMPLICATED -                         + devrand_pool.entropy_count -#endif -                ; +        total_entropy_count = input_pool.entropy_count;  	return proc_dointvec(table, write, buffer, lenp, ppos);  } @@ -1832,75 +1768,6 @@ struct ctl_table random_table[] = {  		.data		= &total_entropy_count,  	},  	{ -		.procname	= "entropy_avail_input", -		.maxlen		= sizeof(int), -		.mode		= 0444, -		.proc_handler	= proc_dointvec, -		.data		= &input_pool.entropy_count, -	}, -#ifdef OVERCOMPLICATED -	{ -		.procname	= "entropy_avail_random", -		.maxlen		= sizeof(int), -		.mode		= 0444, -		.proc_handler	= proc_dointvec, -		.data		= &devrand_pool.entropy_count, -	}, -#endif -	{ -		.procname	= "entropy_avail_urandom", -		.maxlen		= sizeof(int), -		.mode		= 0444, -		.proc_handler	= proc_dointvec, -		.data		= &prng_pool.entropy_count, -	}, -	{ -		.procname	= "extracted_total_input", -		.maxlen		= sizeof(ulonglong), -		.mode		= 0644, -		.proc_handler	= proc_doulonglongvec_minmax, -		.data		= &input_pool.extracted_total, -	}, -#ifdef OVERCOMPLICATED -	{ -		.procname	= "extracted_total_random", -		.maxlen		= sizeof(ulonglong), -		.mode		= 0644, -		.proc_handler	= proc_doulonglongvec_minmax, -		.data		= &devrand_pool.extracted_total, -	}, -#endif -	{ -		.procname	= "extracted_total_urandom", -		.maxlen		= sizeof(ulonglong), -		.mode		= 0644, -		.proc_handler	= proc_doulonglongvec_minmax, -		.data		= &prng_pool.extracted_total, -	}, -	{ -		.procname	= "extracted_subttl_input", -		.maxlen		= sizeof(ulonglong), -		.mode		= 0644, -		.proc_handler	= proc_doulonglongvec_minmax, -		.data		= &input_pool.extracted_subttl, -	}, -#ifdef OVERCOMPLICATED -	{ -		.procname	= "extracted_subttl_random", -		.maxlen		= sizeof(ulonglong), -		.mode		= 0644, -		.proc_handler	= proc_doulonglongvec_minmax, -		.data		= &devrand_pool.extracted_subttl, -	}, -#endif -	{ -		.procname	= "extracted_subttl_urandom", -		.maxlen		= sizeof(ulonglong), -		.mode		= 0644, -		.proc_handler	= proc_doulonglongvec_minmax, -		.data		= &prng_pool.extracted_subttl, -	}, -	{  		.procname	= "read_wakeup_threshold",  		.data		= &random_read_wakeup_thresh,  		.maxlen		= sizeof(int),  | 
