From 4b6d9bdb588a69d1a953bea5d9a8d2601a415376 Mon Sep 17 00:00:00 2001 From: vasilito Date: Sat, 11 Jul 2026 06:45:09 +0300 Subject: [PATCH] FIX: sys_read/sys_write must pass u64::MAX for non-positioned I/O MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The default kreadoff/kwriteoff implementations in scheme/mod.rs require offset=u64::MAX for stream (non-positioned) I/O. Passing offset=0 causes ESPIPE (Illegal seek), which breaks ALL writes to non-positioned FDs including Debug/stdout. This was the root cause of the procmgr child appearing to 'panic' — its log output silently failed with ESPIPE. --- src/syscall/fs.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/syscall/fs.rs b/src/syscall/fs.rs index 63bfe87508..f1080fdd37 100644 --- a/src/syscall/fs.rs +++ b/src/syscall/fs.rs @@ -832,7 +832,7 @@ pub fn sys_read(fd: FileHandle, buf: UserSliceWo, token: &mut CleanLockToken) -> let offset = if desc.internal_flags.contains(InternalFlags::POSITIONED) { desc.offset } else { - 0 + u64::MAX }; Ok(( scheme.kreadoff(desc.number, buf, offset, desc.flags, desc.flags, token)?, @@ -861,7 +861,7 @@ pub fn sys_write(fd: FileHandle, buf: UserSliceRo, token: &mut CleanLockToken) - let offset = if desc.internal_flags.contains(InternalFlags::POSITIONED) { desc.offset } else { - 0 + u64::MAX }; Ok(( scheme.kwriteoff(desc.number, buf, offset, desc.flags, desc.flags, token)?,