| author | |
| committer | |
| log | 428065da30cd957cadd9d1f2428933bab9d17637 |
| tree | bf71acec07fb123258f5913a706577479b7cf6eb |
| parent | 3dbe02e2d8cda1fe0072e71ae7630170c270419e |
| parent | 74ad31536051e68b4b9edf924662b34c30b09da7 |
| signature |
Avoid reading from /dev/urandom on NetBSD3 files changed, 13 insertions(+), 0 deletions(-)
lib/std/c/netbsd.zig+1| ... | @@ -9,6 +9,7 @@ pub const _errno = __errno; | ... | @@ -9,6 +9,7 @@ pub const _errno = __errno; |
| 9 | pub const dl_iterate_phdr_callback = extern fn (info: *dl_phdr_info, size: usize, data: ?*c_void) c_int; | 9 | pub const dl_iterate_phdr_callback = extern fn (info: *dl_phdr_info, size: usize, data: ?*c_void) c_int; |
| 10 | pub extern "c" fn dl_iterate_phdr(callback: dl_iterate_phdr_callback, data: ?*c_void) c_int; | 10 | pub extern "c" fn dl_iterate_phdr(callback: dl_iterate_phdr_callback, data: ?*c_void) c_int; |
| 11 | 11 | ||
| 12 | pub extern "c" fn arc4random_buf(buf: [*]u8, len: usize) void; | ||
| 12 | pub extern "c" fn __fstat50(fd: fd_t, buf: *Stat) c_int; | 13 | pub extern "c" fn __fstat50(fd: fd_t, buf: *Stat) c_int; |
| 13 | pub extern "c" fn __stat50(path: [*:0]const u8, buf: *Stat) c_int; | 14 | pub extern "c" fn __stat50(path: [*:0]const u8, buf: *Stat) c_int; |
| 14 | pub extern "c" fn __clock_gettime50(clk_id: c_int, tp: *timespec) c_int; | 15 | pub extern "c" fn __clock_gettime50(clk_id: c_int, tp: *timespec) c_int; |
lib/std/os.zig+4| ... | @@ -153,6 +153,10 @@ pub fn getrandom(buffer: []u8) GetRandomError!void { | ... | @@ -153,6 +153,10 @@ pub fn getrandom(buffer: []u8) GetRandomError!void { |
| 153 | } | 153 | } |
| 154 | return; | 154 | return; |
| 155 | } | 155 | } |
| 156 | if (builtin.os.tag == .netbsd) { | ||
| 157 | netbsd.arc4random_buf(buffer.ptr, buffer.len); | ||
| 158 | return; | ||
| 159 | } | ||
| 156 | if (builtin.os.tag == .wasi) { | 160 | if (builtin.os.tag == .wasi) { |
| 157 | switch (wasi.random_get(buffer.ptr, buffer.len)) { | 161 | switch (wasi.random_get(buffer.ptr, buffer.len)) { |
| 158 | 0 => return, | 162 | 0 => return, |
src/os.cpp+8| ... | @@ -1462,6 +1462,14 @@ static void init_rand() { | ... | @@ -1462,6 +1462,14 @@ static void init_rand() { |
| 1462 | unsigned seed; | 1462 | unsigned seed; |
| 1463 | memcpy(&seed, ptr_random, sizeof(seed)); | 1463 | memcpy(&seed, ptr_random, sizeof(seed)); |
| 1464 | srand(seed); | 1464 | srand(seed); |
| 1465 | #elif defined(ZIG_OS_FREEBSD) || defined(ZIG_OS_NETBSD) | ||
| 1466 | unsigned seed; | ||
| 1467 | size_t len = sizeof(seed); | ||
| 1468 | int mib[2] = { CTL_KERN, KERN_ARND }; | ||
| 1469 | if (sysctl(mib, 2, &seed, &len, NULL, 0) != 0) { | ||
| 1470 | zig_panic("unable to query random data from sysctl"); | ||
| 1471 | } | ||
| 1472 | srand(seed); | ||
| 1465 | #else | 1473 | #else |
| 1466 | int fd = open("/dev/urandom", O_RDONLY|O_CLOEXEC); | 1474 | int fd = open("/dev/urandom", O_RDONLY|O_CLOEXEC); |
| 1467 | if (fd == -1) { | 1475 | if (fd == -1) { |