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

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

random: simplify arithmetic function flow in account()



commit a254a0e4093fce8c832414a83940736067eed515 upstream.

Now that have_bytes is never modified, we can simplify this function.
First, we move the check for negative entropy_count to be first. That
ensures that subsequent reads of this will be non-negative. Then,
have_bytes and ibytes can be folded into their one use site in the
min_t() function.

Suggested-by: default avatarDominik Brodowski <linux@dominikbrodowski.net>
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 56de23dc
Loading
Loading
Loading
Loading
+6 −11
Original line number Diff line number Diff line
@@ -1293,7 +1293,7 @@ EXPORT_SYMBOL_GPL(add_disk_randomness);
 */
static size_t account(size_t nbytes, int min)
{
	int entropy_count, orig, have_bytes;
	int entropy_count, orig;
	size_t ibytes, nfrac;

	BUG_ON(input_pool.entropy_count > POOL_FRACBITS);
@@ -1301,20 +1301,15 @@ static size_t account(size_t nbytes, int min)
	/* Can we pull enough? */
retry:
	entropy_count = orig = READ_ONCE(input_pool.entropy_count);
	ibytes = nbytes;
	/* never pull more than available */
	have_bytes = entropy_count >> (POOL_ENTROPY_SHIFT + 3);

	if (have_bytes < 0)
		have_bytes = 0;
	ibytes = min_t(size_t, ibytes, have_bytes);
	if (ibytes < min)
		ibytes = 0;

	if (WARN_ON(entropy_count < 0)) {
		pr_warn("negative entropy count: count %d\n", entropy_count);
		entropy_count = 0;
	}

	/* never pull more than available */
	ibytes = min_t(size_t, nbytes, entropy_count >> (POOL_ENTROPY_SHIFT + 3));
	if (ibytes < min)
		ibytes = 0;
	nfrac = ibytes << (POOL_ENTROPY_SHIFT + 3);
	if ((size_t)entropy_count > nfrac)
		entropy_count -= nfrac;