authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-01-05 21:20:20-08:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-01-07 11:03:37-08:00
log90f0d7d0dad706dbfd170f65a12d96d41ebb8c3e
tree8a667459084fc3c08fe55f9cef97628583fc3d52
parent7bd033275e3dd0d91ec61e227a18acea6da5eecb

std.Io.Threaded: implement random seed fallback for WASI


1 files changed, 8 insertions(+), 0 deletions(-)

lib/std/Io/Threaded.zig+8
......@@ -15101,6 +15101,7 @@ fn randomMainThread(t: *Threaded, buffer: []u8) void {
1510115101 std.mem.writeInt(usize, seed[seed.len - @sizeOf(usize) ..][0..@sizeOf(usize)], aslr_addr, .native);
1510215102 switch (native_os) {
1510315103 .windows => fallbackSeedWindows(&seed),
15104 .wasi => if (builtin.link_libc) fallbackSeedPosix(&seed) else fallbackSeedWasi(&seed),
1510415105 else => fallbackSeedPosix(&seed),
1510515106 }
1510615107 },
......@@ -15135,6 +15136,13 @@ fn fallbackSeedWindows(seed: *[Csprng.seed_len]u8) void {
1513515136 std.mem.writeInt(windows.LARGE_INTEGER, seed[0..@sizeOf(windows.LARGE_INTEGER)], pc, .native);
1513615137}
1513715138
15139fn fallbackSeedWasi(seed: *[Csprng.seed_len]u8) void {
15140 var ts: std.os.wasi.timestamp_t = undefined;
15141 if (std.os.wasi.clock_time_get(.REALTIME, 1, &ts) == .SUCCESS) {
15142 std.mem.writeInt(std.os.wasi.timestamp_t, seed[0..@sizeOf(std.os.wasi.timestamp_t)], ts, .native);
15143 }
15144}
15145
1513815146fn randomSecure(userdata: ?*anyopaque, buffer: []u8) Io.RandomSecureError!void {
1513915147 const t: *Threaded = @ptrCast(@alignCast(userdata));
1514015148