Hi Eric, On 3/24/22, Eric Biggers <ebiggers@xxxxxxxxxx> wrote: > On Tue, Mar 22, 2022 at 01:14:36PM -0600, Jason A. Donenfeld wrote: >> For as far back as I can tell, writing to /dev/urandom or /dev/random >> will put entropy into the pool, but won't immediately use it, and won't >> credit it either. > > Did you check kernels v4.7 and earlier? It looks like this actually changed > in > v4.8 when the ChaCha20 CRNG was introduced. v4.7 would mix the data written > to > /dev/{u,}random into {non,}blocking_pool, which would immediately be > reflected > in reads from /dev/{u,}random, sys_getrandom(), and get_random_bytes(). > Writes > to /dev/{u,}random didn't affect the input_pool, which was separate. Oh, I suppose you might be right, actually, that v4.7 and below would hash the non blocking pool, and let /dev/urandom write directly into it, as something distinct from the input pool. This changed with v4.8, 6 years ago, and now there are no LTS kernels that old, with most small devices even having vendor kernels v4.9+. v4.8 apparently did this while fixing a more extreme vulnerability of allowing unprivileged users to bruteforce input bytes (in addition to allowing unbounded unprivileged lock contention). Of those who have been seeding via /dev/random, the ones who additionally issued the ioctl to credit those bits haven't been affected since the crediting solved the issue by invoking a reseeding. And those who didn't issue the ioctl never had their RNG initialize in the first place, causing getrandom() to block until entropy was collected from elsewhere, until it was safe, so the harm there was minimal. So it's not great, but it's not horrific either, and I still think the cons strongly outweigh the pros in trying to change the behavior from what it is now. Jason