From 74ad31536051e68b4b9edf924662b34c30b09da7 Mon Sep 17 00:00:00 2001 From: nia Date: Fri, 1 May 2020 17:23:27 +0100 Subject: [PATCH] In init_rand avoid reading from /dev/urandom on NetBSD/FreeBSD Use the KERN_ARND sysctl instead. --- src/os.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/os.cpp b/src/os.cpp index 16d6847d4e..26ed0dc4e1 100644 --- a/src/os.cpp +++ b/src/os.cpp @@ -1462,6 +1462,14 @@ static void init_rand() { unsigned seed; memcpy(&seed, ptr_random, sizeof(seed)); srand(seed); +#elif defined(ZIG_OS_FREEBSD) || defined(ZIG_OS_NETBSD) + unsigned seed; + size_t len = sizeof(seed); + int mib[2] = { CTL_KERN, KERN_ARND }; + if (sysctl(mib, 2, &seed, &len, NULL, 0) != 0) { + zig_panic("unable to query random data from sysctl"); + } + srand(seed); #else int fd = open("/dev/urandom", O_RDONLY|O_CLOEXEC); if (fd == -1) {