From d2e949cf9bb2aa088b3c21f4c4ea34ec71ae62d0 Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Thu, 30 Apr 2026 03:53:47 -0700 Subject: [PATCH] mkdtemp: remove toctou --- nfs.zig | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/nfs.zig b/nfs.zig index 759940a4f2302205766de7ab7b2bc6d9338b8ac6..fc2980959a1b4c6f86eced111f77a9c322cc924c 100644 --- a/nfs.zig +++ b/nfs.zig @@ -46,9 +46,12 @@ pub fn munmap(region: []const u8) void { } pub fn mkdtemp() !Dir { - var template = "/tmp/tmp.XXXXXX\x00".*; - const path_p = try sys.mkdtemp(template[0 .. template.len - 1 :0].ptr); - const path = std.mem.sliceTo(path_p, 0); - std.log.debug("path: {s}", .{path}); - return cwd().openDir(path, .{}); + var template = "/tmp/tmp.XXXXXXXXXX\x00".*; + const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + var buf: [10]u8 = @splat(0); + const rand = try sys.getrandom(&buf, 0); + if (rand.len != 10) return error.EAGAIN; + for (template[9..][0..10], rand) |*a, b| a.* = letters[b % 62]; + const path = template[0 .. template.len - 1 :0]; + return cwd().makeOpenPath(path, .{}); } -- 2.54.0