Blocking doesn’t buy you anything because the seed could have already been used to generate data in-memory, which can then later be sent over a network or persisted to permanent storage.
Re:Fixing Getrandom()
by tedunangst on Tuesday October 01, 2019 @05:11PM
(#21130708)
The light goes on! :) Yes, the problem is not as impossible as it seems if you start with a best effort here, best effort there approach and converge to a point where the exceptions don't matter so much.
I understand in general why seed reuse is bad. If an attacker can get access to two things that used the same seed, that attacker can often learn things that the randomness was suppose to make unlearnable.
In this particular case, though, I wonder if that is actually a problem. If the seed is used before you have writable storage, and then the system is rebooted without writable storage ever becoming available (and so before the seed could be updated), and then the system reuses that seed on the next boot--the only way an attacker can get access to two things that used the same seed is if something that used it on the first boot has persisted somewhere.
Since there was no local writable storage the first time, this can only happen if the results of using the seed were communicated off the system, via networking or via a terminal, to someplace that did have working writable storage.
Thus, it would seem, that if you block networking with other machines and terminal access until /var becomes writable and the seed is updated, there is no problem with seed reuse.