diff options
Diffstat (limited to 'drivers/char/random.c')
| -rw-r--r-- | drivers/char/random.c | 21 | 
1 files changed, 5 insertions, 16 deletions
| diff --git a/drivers/char/random.c b/drivers/char/random.c index 0fe9e200e4c8..605969ed0f96 100644 --- a/drivers/char/random.c +++ b/drivers/char/random.c @@ -500,7 +500,6 @@ struct entropy_store {  	unsigned short add_ptr;  	unsigned short input_rotate;  	int entropy_count; -	unsigned int initialized:1;  	unsigned int last_data_init:1;  	__u8 last_data[EXTRACT_SIZE];  }; @@ -660,7 +659,7 @@ static void process_random_ready_list(void)   */  static void credit_entropy_bits(struct entropy_store *r, int nbits)  { -	int entropy_count, orig, has_initialized = 0; +	int entropy_count, orig;  	const int pool_size = r->poolinfo->poolfracbits;  	int nfrac = nbits << ENTROPY_SHIFT; @@ -717,23 +716,14 @@ retry:  	if (cmpxchg(&r->entropy_count, orig, entropy_count) != orig)  		goto retry; -	if (has_initialized) { -		r->initialized = 1; -		kill_fasync(&fasync, SIGIO, POLL_IN); -	} -  	trace_credit_entropy_bits(r->name, nbits,  				  entropy_count >> ENTROPY_SHIFT, _RET_IP_);  	if (r == &input_pool) {  		int entropy_bits = entropy_count >> ENTROPY_SHIFT; -		if (crng_init < 2) { -			if (entropy_bits < 128) -				return; +		if (crng_init < 2 && entropy_bits >= 128)  			crng_reseed(&primary_crng, r); -			entropy_bits = ENTROPY_BITS(r); -		}  	}  } @@ -819,7 +809,7 @@ static bool __init crng_init_try_arch_early(struct crng_state *crng)  static void __maybe_unused crng_initialize_secondary(struct crng_state *crng)  { -	memcpy(&crng->state[0], "expand 32-byte k", 16); +	chacha_init_consts(crng->state);  	_get_random_bytes(&crng->state[4], sizeof(__u32) * 12);  	crng_init_try_arch(crng);  	crng->init_time = jiffies - CRNG_RESEED_INTERVAL - 1; @@ -827,7 +817,7 @@ static void __maybe_unused crng_initialize_secondary(struct crng_state *crng)  static void __init crng_initialize_primary(struct crng_state *crng)  { -	memcpy(&crng->state[0], "expand 32-byte k", 16); +	chacha_init_consts(crng->state);  	_extract_entropy(&input_pool, &crng->state[4], sizeof(__u32) * 12, 0);  	if (crng_init_try_arch_early(crng) && trust_cpu) {  		invalidate_batched_entropy(); @@ -1372,8 +1362,7 @@ retry:  }  /* - * This function does the actual extraction for extract_entropy and - * extract_entropy_user. + * This function does the actual extraction for extract_entropy.   *   * Note: we assume that .poolwords is a multiple of 16 words.   */ | 
