commit 90f0d7d0dad706dbfd170f65a12d96d41ebb8c3e (tree)
parent 7bd033275e3dd0d91ec61e227a18acea6da5eecb
Author: Andrew Kelley <andrew@ziglang.org>
Date: Mon, 5 Jan 2026 21:20:20 -0800
std.Io.Threaded: implement random seed fallback for WASI
Diffstat:
1 file changed, 8 insertions(+), 0 deletions(-)
diff --git a/lib/std/Io/Threaded.zig b/lib/std/Io/Threaded.zig
@@ -15101,6 +15101,7 @@ fn randomMainThread(t: *Threaded, buffer: []u8) void {
std.mem.writeInt(usize, seed[seed.len - @sizeOf(usize) ..][0..@sizeOf(usize)], aslr_addr, .native);
switch (native_os) {
.windows => fallbackSeedWindows(&seed),
+ .wasi => if (builtin.link_libc) fallbackSeedPosix(&seed) else fallbackSeedWasi(&seed),
else => fallbackSeedPosix(&seed),
}
},
@@ -15135,6 +15136,13 @@ fn fallbackSeedWindows(seed: *[Csprng.seed_len]u8) void {
std.mem.writeInt(windows.LARGE_INTEGER, seed[0..@sizeOf(windows.LARGE_INTEGER)], pc, .native);
}
+fn fallbackSeedWasi(seed: *[Csprng.seed_len]u8) void {
+ var ts: std.os.wasi.timestamp_t = undefined;
+ if (std.os.wasi.clock_time_get(.REALTIME, 1, &ts) == .SUCCESS) {
+ std.mem.writeInt(std.os.wasi.timestamp_t, seed[0..@sizeOf(std.os.wasi.timestamp_t)], ts, .native);
+ }
+}
+
fn randomSecure(userdata: ?*anyopaque, buffer: []u8) Io.RandomSecureError!void {
const t: *Threaded = @ptrCast(@alignCast(userdata));