initfs: Symlinks should be resolved relative to symlink parent

This commit is contained in:
bjorn3
2026-02-17 20:34:31 +01:00
parent fc4b48df67
commit c028c49c55
2 changed files with 6 additions and 12 deletions
+1 -7
View File
@@ -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]);