From c028c49c55a9dbb378732c035acd6c3485be4670 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Tue, 17 Feb 2026 20:34:31 +0100 Subject: [PATCH] initfs: Symlinks should be resolved relative to symlink parent --- bootstrap/src/initfs.rs | 8 +------- initfs/tools/src/lib.rs | 10 +++++----- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/bootstrap/src/initfs.rs b/bootstrap/src/initfs.rs index 2ef8dcb21c..640a1f2636 100644 --- a/bootstrap/src/initfs.rs +++ b/bootstrap/src/initfs.rs @@ -8,7 +8,6 @@ use alloc::string::String; use hashbrown::HashMap; use redox_initfs::{InitFs, Inode, InodeDir, InodeKind, InodeStruct, types::Timespec}; -use redox_path::canonicalize_to_standard; use redox_rt::proc::FdGuard; use redox_scheme::{CallerCtx, OpenResult, RequestKind, scheme::SchemeSync}; @@ -238,12 +237,7 @@ impl SchemeSync for InitFsScheme { InodeKind::Dir(_) => Err(Error::new(EISDIR)), InodeKind::Link(link) => { let link_data = link.data().map_err(|_| Error::new(EIO))?; - let path = core::str::from_utf8(link_data).map_err(|_| Error::new(ENOENT))?; - let cannonical = - canonicalize_to_standard(Some("/"), path).ok_or_else(|| Error::new(ENOENT))?; - let data = cannonical.as_bytes(); - - let src_buf = &data[core::cmp::min(offset, data.len())..]; + let src_buf = &link_data[core::cmp::min(offset, link_data.len())..]; let to_copy = core::cmp::min(src_buf.len(), buffer.len()); buffer[..to_copy].copy_from_slice(&src_buf[..to_copy]); diff --git a/initfs/tools/src/lib.rs b/initfs/tools/src/lib.rs index 3f11808091..238e52a282 100644 --- a/initfs/tools/src/lib.rs +++ b/initfs/tools/src/lib.rs @@ -120,14 +120,14 @@ fn read_directory(state: &mut State, path: &Path, root_path: &Path) -> Result