From 3f3e88e7b455bb458839d0d59eb4c50699aeadbf 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 6968e12e88e61017f944e5a9e5df8905a08e98ae..f719bb02a336382a0a8843db52c4ca3fd3406ddf 100644 --- a/lib/std/Io/Threaded.zig +++ b/lib/std/Io/Threaded.zig @@ -10030,6 +10030,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), @@ -10208,6 +10209,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), @@ -10242,6 +10244,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