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 {...@@ -15101,6 +15101,7 @@ fn randomMainThread(t: *Threaded, buffer: []u8) void {
15101 std.mem.writeInt(usize, seed[seed.len - @sizeOf(usize) ..][0..@sizeOf(usize)], aslr_addr, .native);15101 std.mem.writeInt(usize, seed[seed.len - @sizeOf(usize) ..][0..@sizeOf(usize)], aslr_addr, .native);
15102 switch (native_os) {15102 switch (native_os) {
15103 .windows => fallbackSeedWindows(&seed),15103 .windows => fallbackSeedWindows(&seed),
15104 .wasi => if (builtin.link_libc) fallbackSeedPosix(&seed) else fallbackSeedWasi(&seed),
15104 else => fallbackSeedPosix(&seed),15105 else => fallbackSeedPosix(&seed),
15105 }15106 }
15106 },15107 },
...@@ -15135,6 +15136,13 @@ fn fallbackSeedWindows(seed: *[Csprng.seed_len]u8) void {...@@ -15135,6 +15136,13 @@ fn fallbackSeedWindows(seed: *[Csprng.seed_len]u8) void {
15135 std.mem.writeInt(windows.LARGE_INTEGER, seed[0..@sizeOf(windows.LARGE_INTEGER)], pc, .native);15136 std.mem.writeInt(windows.LARGE_INTEGER, seed[0..@sizeOf(windows.LARGE_INTEGER)], pc, .native);
15136}15137}
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
15138fn randomSecure(userdata: ?*anyopaque, buffer: []u8) Io.RandomSecureError!void {15146fn randomSecure(userdata: ?*anyopaque, buffer: []u8) Io.RandomSecureError!void {
15139 const t: *Threaded = @ptrCast(@alignCast(userdata));15147 const t: *Threaded = @ptrCast(@alignCast(userdata));
1514015148