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

Commit 92fc1591 authored by Sandeep Patil's avatar Sandeep Patil Committed by Alistair Strachan
Browse files

ANDROID: Fix race in crng_reseed()



The crng_init triggers process_crng_rdy_callbacks() and those callbacks
can call into the crng again. So, leave the spinlock before processing
the callbacks.

This is a version of upstream commit '4a072c71f49b'

Bug: 124090075
Test: Build and boot cuttlefish with hwrng enabled

Change-Id: Ie5b7a60cd17eae80ca26b518c60110fd18efd548
Signed-off-by: default avatarSandeep Patil <sspatil@android.com>
parent 72cabd41
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -893,6 +893,7 @@ static void crng_reseed(struct crng_state *crng, struct entropy_store *r)
	if (crng == &primary_crng && crng_init < 2) {
		numa_crng_init();
		crng_init = 2;
		spin_unlock_irqrestore(&crng->lock, flags);
		process_random_ready_list();
		wake_up_interruptible(&crng_init_wait);
		pr_notice("random: crng init done\n");
@@ -908,9 +909,10 @@ static void crng_reseed(struct crng_state *crng, struct entropy_store *r)
				  urandom_warning.missed);
			urandom_warning.missed = 0;
		}
	}
	} else {
		spin_unlock_irqrestore(&crng->lock, flags);
	}
}

static inline void maybe_reseed_primary_crng(void)
{