From 975d74f65474a9a73c007cf5dd4e1f19a7ccd25f Mon Sep 17 00:00:00 2001 From: Jan Schlien Date: Fri, 9 Oct 2026 10:39:47 +0200 Subject: [PATCH] std.Io.Threaded: map EACCES from file reads A read can fail with EACCES on a file that was opened successfully, e.g. procfs entries such as /proc//stack check permissions at read time. The readv, preadv and pread switches did not handle it, so it ended up in unexpectedErrno which dumps a stack trace in Debug builds. --- lib/std/Io/Threaded.zig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/std/Io/Threaded.zig b/lib/std/Io/Threaded.zig index dae5f07f95685e5d4e6a8b883f3a392b65d8bd54..0f652f44198f1cc13d4009a09039a6fc49fc97e6 100644 --- a/lib/std/Io/Threaded.zig +++ b/lib/std/Io/Threaded.zig @@ -10008,6 +10008,7 @@ fn fileReadStreamingPosix(file: File, data: []const []u8) File.ReadStreamingErro if (native_os == .wasi) return error.IsDir; // File operation on directory. return error.NotOpenForReading; }, + .ACCES => return syscall.fail(error.AccessDenied), .AGAIN => return syscall.fail(error.WouldBlock), .IO => return syscall.fail(error.InputOutput), .ISDIR => return syscall.fail(error.IsDir), @@ -10186,6 +10187,7 @@ fn fileReadPositionalPosix(file: File, data: []const []u8, offset: u64) File.Rea try syscall.checkCancel(); continue; }, + .ACCES => return syscall.fail(error.AccessDenied), .NXIO => return syscall.fail(error.Unseekable), .SPIPE => return syscall.fail(error.Unseekable), .OVERFLOW => return syscall.fail(error.Unseekable), @@ -10220,6 +10222,7 @@ fn fileReadPositionalPosix(file: File, data: []const []u8, offset: u64) File.Rea try syscall.checkCancel(); continue; }, + .ACCES => return syscall.fail(error.AccessDenied), .NXIO => return syscall.fail(error.Unseekable), .SPIPE => return syscall.fail(error.Unseekable), .OVERFLOW => return syscall.fail(error.Unseekable), -- 2.54.0