Fall back to /dev/urandom on EPERM for getrandom

This can happen because of seccomp or some VMs.

Fixes #52609.
This commit is contained in:
Tobias Bucher 2019-05-01 22:23:07 +02:00
parent 6cc24f2603
commit bd8885d340

View File

@ -47,7 +47,12 @@ mod imp {
let err = errno() as libc::c_int;
if err == libc::EINTR {
continue;
} else if err == libc::ENOSYS {
} else if err == libc::ENOSYS || err == libc::EPERM {
// Fall back to reading /dev/urandom if `getrandom` is not
// supported on the current kernel.
//
// Also fall back in case it is disabled by something like
// seccomp or inside of virtual machines.
GETRANDOM_UNAVAILABLE.store(true, Ordering::Relaxed);
return false;
} else if err == libc::EAGAIN {