Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 13ffd431 authored by Jason A. Donenfeld's avatar Jason A. Donenfeld Committed by Greg Kroah-Hartman
Browse files

random: make consistent usage of crng_ready()



commit a96cfe2d427064325ecbf56df8816c6b871ec285 upstream.

Rather than sometimes checking `crng_init < 2`, we should always use the
crng_ready() macro, so that should we change anything later, it's
consistent. Additionally, that macro already has a likely() around it,
which means we don't need to open code our own likely() and unlikely()
annotations.

Cc: Theodore Ts'o <tytso@mit.edu>
Reviewed-by: default avatarDominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 53af3a69
Loading
Loading
Loading
Loading
+7 −12
Original line number Diff line number Diff line
@@ -125,18 +125,13 @@ static void try_to_generate_entropy(void);
 */
int wait_for_random_bytes(void)
{
	if (likely(crng_ready()))
		return 0;

	do {
	while (!crng_ready()) {
		int ret;
		ret = wait_event_interruptible_timeout(crng_init_wait, crng_ready(), HZ);
		if (ret)
			return ret > 0 ? 0 : ret;

		try_to_generate_entropy();
	} while (!crng_ready());

	}
	return 0;
}
EXPORT_SYMBOL(wait_for_random_bytes);
@@ -291,7 +286,7 @@ static void crng_reseed(void)
		++next_gen;
	WRITE_ONCE(base_crng.generation, next_gen);
	WRITE_ONCE(base_crng.birth, jiffies);
	if (crng_init < 2) {
	if (!crng_ready()) {
		crng_init = 2;
		finalize_init = true;
	}
@@ -359,7 +354,7 @@ static void crng_make_state(u32 chacha_state[CHACHA20_BLOCK_SIZE / sizeof(u32)],
	 * ready, we do fast key erasure with the base_crng directly, because
	 * this is what crng_pre_init_inject() mutates during early init.
	 */
	if (unlikely(!crng_ready())) {
	if (!crng_ready()) {
		bool ready;

		spin_lock_irqsave(&base_crng.lock, flags);
@@ -799,7 +794,7 @@ static void credit_entropy_bits(size_t nbits)
		entropy_count = min_t(unsigned int, POOL_BITS, orig + add);
	} while (cmpxchg(&input_pool.entropy_count, orig, entropy_count) != orig);

	if (crng_init < 2 && entropy_count >= POOL_MIN_BITS)
	if (!crng_ready() && entropy_count >= POOL_MIN_BITS)
		crng_reseed();
}

@@ -956,7 +951,7 @@ int __init rand_initialize(void)
	extract_entropy(base_crng.key, sizeof(base_crng.key));
	++base_crng.generation;

	if (arch_init && trust_cpu && crng_init < 2) {
	if (arch_init && trust_cpu && !crng_ready()) {
		crng_init = 2;
		pr_notice("crng init done (trusting CPU's manufacturer)\n");
	}
@@ -1545,7 +1540,7 @@ static long random_ioctl(struct file *f, unsigned int cmd, unsigned long arg)
	case RNDRESEEDCRNG:
		if (!capable(CAP_SYS_ADMIN))
			return -EPERM;
		if (crng_init < 2)
		if (!crng_ready())
			return -ENODATA;
		crng_reseed();
		return 0;