[Bug 237869] is_random_seeded should perform pre_read for unseeded case
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Mon May 13 07:55:03 UTC 2019
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=237869
Bug ID: 237869
Summary: is_random_seeded should perform pre_read for unseeded
case
Product: Base System
Version: CURRENT
Hardware: Any
OS: Any
Status: New
Severity: Affects Many People
Priority: ---
Component: kern
Assignee: bugs at FreeBSD.org
Reporter: delphij at FreeBSD.org
I noticed the following on a recent -CURRENT amd64 system, this message on
boot:
arc4random: WARNING: initial seeding bypassed the cryptographic random device
because it was not yet seeded and the knob 'bypass_before_seeding' was enabled.
Despite /boot/entropy is preloaded. It looks like it was related to r346358.
On my system, the call path is roughly:
vnet_domain_init_inet_vnet_init -> arc4random()
At the time, the entropy device have already seen /boot/entropy through
random_harvestq_prime(), however, because nobody have read from entropy device,
the pre_read method was never called, therefore the device would report itself
as unseeded, even though it already have enough entropy to proceed.
(By the way, r346292 should be reverted now that r346358 is landed).
It looks like is_random_seeded should do something like:
if (__predict_false(!p_random_alg_context->ra_seeded())) {
p_random_alg_context->ra_pre_read();
return (p_random_alg_context->ra_seeded());
}
return (true);
Instead of its current form.
Note that random_infra.c needs similar treatment as well; the current form is
broken by the way.
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the freebsd-bugs
mailing list