diff --git a/Cargo.lock b/Cargo.lock index 73baec3b..51293baa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -944,8 +944,10 @@ version = "0.1.0" dependencies = [ "ahash", "async-trait", + "async-utils", "bitflags 2.6.0", "config", + "crate_interface", "device-core", "downcast-rs", "driver", diff --git a/kernel/src/impls.rs b/kernel/src/impls.rs index e0893a2d..7758a936 100644 --- a/kernel/src/impls.rs +++ b/kernel/src/impls.rs @@ -1,6 +1,6 @@ //! Impls of traits defined in other crates. -use alloc::{fmt, string::ToString}; +use alloc::{fmt, string::ToString, sync::Arc}; use config::mm::VIRT_RAM_OFFSET; use driver::KernelPageTableIf; @@ -8,7 +8,8 @@ use log::Level; use logging::{ColorCode, LogIf}; use memory::{KernelMappingIf, PageTable, PhysAddr, VirtAddr}; use net::HasSignalIf; -use vfs::procfs::KernelProcIf; +use vfs::{procfs::KernelProcIf, sys_root_dentry}; +use vfs_core::{Dentry, SysRootDentryIf}; use crate::{ mm::kernel_page_table_mut, @@ -109,3 +110,12 @@ impl KernelProcIf for KernelProcIfImpl { current_task_ref().elf().dentry().path() } } + +struct SysRootDentryIfImpl; + +#[crate_interface::impl_interface] +impl SysRootDentryIf for SysRootDentryIfImpl { + fn sys_root_dentry() -> Arc { + sys_root_dentry() + } +} diff --git a/kernel/src/task/mod.rs b/kernel/src/task/mod.rs index 92e8251a..d28e83a1 100644 --- a/kernel/src/task/mod.rs +++ b/kernel/src/task/mod.rs @@ -15,7 +15,7 @@ pub use schedule::{spawn_kernel_task, spawn_user_task}; pub use task::Task; pub use tid::{PGid, Pid, Tid, TID_ALLOCATOR}; use vfs::sys_root_dentry; -use vfs_core::Path; +use vfs_core::{OpenFlags, Path}; use crate::{ mm::memory_space::{init_stack, MemorySpace}, @@ -29,7 +29,7 @@ pub fn spawn_init_proc() { let envp = Vec::new(); let file = Path::new(sys_root_dentry(), sys_root_dentry(), init_proc_path) - .walk() + .walk(OpenFlags::empty()) .unwrap() .open() .unwrap(); diff --git a/kernel/src/task/task.rs b/kernel/src/task/task.rs index e4a02cbf..57bdfd47 100644 --- a/kernel/src/task/task.rs +++ b/kernel/src/task/task.rs @@ -30,7 +30,9 @@ use sync::mutex::SpinNoIrqLock; use systype::{SysError, SysResult}; use time::stat::TaskTimeStat; use vfs::{fd_table::FdTable, sys_root_dentry}; -use vfs_core::{is_absolute_path, AtFd, Dentry, File, InodeMode, InodeType, OpenFlags, Path}; +use vfs_core::{ + is_absolute_path, split_path, AtFd, Dentry, File, InodeMode, InodeType, OpenFlags, Path, +}; use super::{ resource::CpuMask, @@ -677,11 +679,12 @@ impl Task { } } }; - let dentry = path.walk()?; + + let dentry = path.walk(OpenFlags::empty())?; if flags.contains(OpenFlags::O_NOFOLLOW) { Ok(dentry) } else { - self.resolve_dentry(dentry) + Path::resolve_dentry(dentry) } } @@ -700,7 +703,7 @@ impl Task { } else { Path::new(sys_root_dentry(), dentry_it.parent().unwrap(), &path) }; - let new_dentry = path.walk()?; + let new_dentry = path.walk(OpenFlags::empty())?; dentry_it = new_dentry; } _ => return Ok(dentry_it), @@ -712,7 +715,7 @@ impl Task { /// Given a path, absolute or relative, will find. pub fn resolve_path(&self, path: &str) -> SysResult> { let dentry = self.at_helper(AtFd::FdCwd, path, OpenFlags::empty())?; - self.resolve_dentry(dentry) + Path::resolve_dentry(dentry) } /// Given a path, absolute or relative, will find. diff --git a/modules/vfs-core/Cargo.toml b/modules/vfs-core/Cargo.toml index 5d3ff980..dd236f02 100644 --- a/modules/vfs-core/Cargo.toml +++ b/modules/vfs-core/Cargo.toml @@ -14,7 +14,9 @@ device-core = { path = "../device-core/" } page = { path = "../page/" } driver = { path = "../../driver/" } time = { path = "../time" } +async-utils = { path = "../../crates/async-utils/" } +crate_interface = "0.1" bitflags = "2.5" log = "0.4" async-trait = "0.1" diff --git a/modules/vfs-core/src/path.rs b/modules/vfs-core/src/path.rs index 3f206426..a7dc673b 100644 --- a/modules/vfs-core/src/path.rs +++ b/modules/vfs-core/src/path.rs @@ -4,18 +4,20 @@ use alloc::{ vec::Vec, }; +use async_utils::block_on; +use crate_interface::call_interface; use systype::{SysError, SysResult}; -use crate::{Dentry, InodeMode}; +use crate::{dentry, Dentry, InodeMode, InodeType, OpenFlags}; #[derive(Clone)] pub struct Path { /// The root of the file system - root: Arc, + pub root: Arc, /// The directory to start searching from - start: Arc, + pub start: Arc, /// The path to search for - path: String, + pub path: String, } impl Eq for Path {} @@ -36,7 +38,7 @@ impl Path { } /// Walk until path has been resolved. - pub fn walk(&self) -> SysResult> { + pub fn walk(&self, flags: OpenFlags) -> SysResult> { let path = self.path.as_str(); let mut dentry = if is_absolute_path(path) { self.root.clone() @@ -50,20 +52,61 @@ impl Path { dentry = dentry.parent().ok_or(SysError::ENOENT)?; } // NOTE: lookup will only create negative dentry in non-negetive dir dentry - name => match dentry.lookup(name) { - Ok(sub_dentry) => { - log::debug!("[Path::walk] sub dentry {}", sub_dentry.name()); - dentry = sub_dentry + name => { + dentry = if !flags.contains(OpenFlags::O_NOFOLLOW) + && dentry.inode()?.itype().is_symlink() + { + Path::resolve_dentry(dentry)? + } else { + dentry + }; + match dentry.lookup(name) { + Ok(sub_dentry) => { + log::debug!("[Path::walk] sub dentry {}", sub_dentry.name()); + dentry = sub_dentry + } + Err(e) => { + log::warn!("[Path::walk] {e:?} when walking in path {path}"); + return Err(e); + } } - Err(e) => { - log::warn!("[Path::walk] {e:?} when walking in path {path}"); - return Err(e); - } - }, + } } } Ok(dentry) } + + pub fn resolve_dentry(dentry: Arc) -> SysResult> { + const MAX_RESOLVE_LINK_DEPTH: usize = 40; + let mut dentry_it = dentry; + for _ in 0..MAX_RESOLVE_LINK_DEPTH { + if dentry_it.is_negetive() { + return Ok(dentry_it); + } + match dentry_it.inode()?.itype() { + InodeType::SymLink => { + let path = block_on(async { dentry_it.open()?.readlink_string().await })?; + let path = if is_absolute_path(&path) { + Path::new( + call_interface!(SysRootDentryIf::sys_root_dentry()), + call_interface!(SysRootDentryIf::sys_root_dentry()), + &path, + ) + } else { + Path::new( + call_interface!(SysRootDentryIf::sys_root_dentry()), + dentry_it.parent().unwrap(), + &path, + ) + }; + let new_dentry = path.walk(OpenFlags::empty())?; + dentry_it = new_dentry; + } + _ => return Ok(dentry_it), + } + } + Err(SysError::ELOOP) + } } pub fn is_absolute_path(path: &str) -> bool { @@ -95,3 +138,8 @@ pub fn split_parent_and_name(path: &str) -> (&str, Option<&str>) { pub fn get_name(path: &str) -> &str { path.split('/').last().unwrap_or("/") } + +#[crate_interface::def_interface] +pub trait SysRootDentryIf { + fn sys_root_dentry() -> Arc; +} diff --git a/modules/vfs/src/lib.rs b/modules/vfs/src/lib.rs index 9be25095..5ae13257 100644 --- a/modules/vfs/src/lib.rs +++ b/modules/vfs/src/lib.rs @@ -21,7 +21,7 @@ use procfs::init_procfs; use sockfs::SockFsType; use spin::Once; use sync::mutex::SpinNoIrqLock; -use vfs_core::{Dentry, DentryState, FileSystemType, InodeMode, MountFlags, Path}; +use vfs_core::{Dentry, DentryState, FileSystemType, InodeMode, MountFlags, OpenFlags, Path}; use crate::{ devfs::{init_devfs, DevFsType}, @@ -131,7 +131,7 @@ struct FrameReleaseIfImpl; impl FrameReleaseIf for FrameReleaseIfImpl { fn release_frames() { let ltp_dentry = Path::new(sys_root_dentry(), sys_root_dentry(), "/ltp/testcases/bin/") - .walk() + .walk(OpenFlags::empty()) .unwrap(); for (_, child) in ltp_dentry.children() { if let Ok(inode) = child.inode() { diff --git a/user/src/bin/final_tests.rs b/user/src/bin/final_tests.rs index d1890809..b698d796 100644 --- a/user/src/bin/final_tests.rs +++ b/user/src/bin/final_tests.rs @@ -10,256 +10,245 @@ use user_lib::{execve, fork, wait, waitpid}; #[macro_use] extern crate user_lib; -const TESTCASES: [&str; 248] = [ +const TESTCASES: &[&str] = &[ "time-test", - "./test-ltp.sh ltp/testcases/bin/abs01", - "./test-ltp.sh ltp/testcases/bin/accept01", - "./test-ltp.sh ltp/testcases/bin/alarm02", - "./test-ltp.sh ltp/testcases/bin/alarm03", - "./test-ltp.sh ltp/testcases/bin/alarm05", - "./test-ltp.sh ltp/testcases/bin/alarm06", - "./test-ltp.sh ltp/testcases/bin/alarm07", - "./test-ltp.sh ltp/testcases/bin/atof01", - "./test-ltp.sh ltp/testcases/bin/chown01", - "./test-ltp.sh ltp/testcases/bin/clock_nanosleep04", - "./test-ltp.sh ltp/testcases/bin/close01", - "./test-ltp.sh ltp/testcases/bin/close02", - "./test-ltp.sh ltp/testcases/bin/clone01", - "./test-ltp.sh ltp/testcases/bin/clone04", - "./test-ltp.sh ltp/testcases/bin/confstr01", - "./test-ltp.sh ltp/testcases/bin/creat03", - "./test-ltp.sh ltp/testcases/bin/creat05", - "./test-ltp.sh ltp/testcases/bin/diotest1", - "./test-ltp.sh ltp/testcases/bin/diotest3", - "./test-ltp.sh ltp/testcases/bin/diotest6", - "./test-ltp.sh ltp/testcases/bin/dirty", - "./test-ltp.sh ltp/testcases/bin/dup01", - "./test-ltp.sh ltp/testcases/bin/dup02", - "./test-ltp.sh ltp/testcases/bin/dup03", - "./test-ltp.sh ltp/testcases/bin/dup04", - "./test-ltp.sh ltp/testcases/bin/dup06", - "./test-ltp.sh ltp/testcases/bin/dup07", - "./test-ltp.sh ltp/testcases/bin/dup201", - "./test-ltp.sh ltp/testcases/bin/dup202", - "./test-ltp.sh ltp/testcases/bin/dup203", - "./test-ltp.sh ltp/testcases/bin/dup204", - "./test-ltp.sh ltp/testcases/bin/dup205", - "./test-ltp.sh ltp/testcases/bin/dup206", - "./test-ltp.sh ltp/testcases/bin/dup207", - "./test-ltp.sh ltp/testcases/bin/dup3_01", - "./test-ltp.sh ltp/testcases/bin/dup3_02", - "./test-ltp.sh ltp/testcases/bin/exit02", - "./test-ltp.sh ltp/testcases/bin/faccessat01", - "./test-ltp.sh ltp/testcases/bin/faccessat02", - "./test-ltp.sh ltp/testcases/bin/fchdir01", - "./test-ltp.sh ltp/testcases/bin/fchmodat01", - "./test-ltp.sh ltp/testcases/bin/fchown01", - "./test-ltp.sh ltp/testcases/bin/fcntl02", - "./test-ltp.sh ltp/testcases/bin/fcntl02_64", - "./test-ltp.sh ltp/testcases/bin/fcntl03", - "./test-ltp.sh ltp/testcases/bin/fcntl03_64", - "./test-ltp.sh ltp/testcases/bin/fcntl04", - "./test-ltp.sh ltp/testcases/bin/fcntl04_64", - "./test-ltp.sh ltp/testcases/bin/fcntl08", - "./test-ltp.sh ltp/testcases/bin/fcntl08_64", - "./test-ltp.sh ltp/testcases/bin/fcntl29", - "./test-ltp.sh ltp/testcases/bin/fcntl29_64", - "./test-ltp.sh ltp/testcases/bin/fdatasync02", - "./test-ltp.sh ltp/testcases/bin/flistxattr03", - "./test-ltp.sh ltp/testcases/bin/flock01", - "./test-ltp.sh ltp/testcases/bin/fork01", - "./test-ltp.sh ltp/testcases/bin/fork03", - "./test-ltp.sh ltp/testcases/bin/fork05", - "./test-ltp.sh ltp/testcases/bin/fork07", - "./test-ltp.sh ltp/testcases/bin/fork08", - "./test-ltp.sh ltp/testcases/bin/fork09", - "./test-ltp.sh ltp/testcases/bin/fork10", - "./test-ltp.sh ltp/testcases/bin/fork_procs", - "./test-ltp.sh ltp/testcases/bin/fpathconf01", - "./test-ltp.sh ltp/testcases/bin/fptest01", - "./test-ltp.sh ltp/testcases/bin/fptest02", - "./test-ltp.sh ltp/testcases/bin/fs_perms", - "./test-ltp.sh ltp/testcases/bin/futex_wait04", - "./test-ltp.sh ltp/testcases/bin/genload", - "./test-ltp.sh ltp/testcases/bin/genlog10", - "./test-ltp.sh ltp/testcases/bin/getcontext01", - "./test-ltp.sh ltp/testcases/bin/getcwd02", - "./test-ltp.sh ltp/testcases/bin/getdomainname01", - "./test-ltp.sh ltp/testcases/bin/geteuid01", - "./test-ltp.sh ltp/testcases/bin/gethostbyname_r01", - "./test-ltp.sh ltp/testcases/bin/gethostname01", - "./test-ltp.sh ltp/testcases/bin/gethostname02", - "./test-ltp.sh ltp/testcases/bin/getitimer01", - "./test-ltp.sh ltp/testcases/bin/getitimer02", - "./test-ltp.sh ltp/testcases/bin/getpagesize01", - "./test-ltp.sh ltp/testcases/bin/getpgid02", - "./test-ltp.sh ltp/testcases/bin/getpgrp01", - "./test-ltp.sh ltp/testcases/bin/getppid01", - "./test-ltp.sh ltp/testcases/bin/getrandom02", - "./test-ltp.sh ltp/testcases/bin/getrandom04", - "./test-ltp.sh ltp/testcases/bin/getresgid01", - "./test-ltp.sh ltp/testcases/bin/getresuid01", - "./test-ltp.sh ltp/testcases/bin/getrlimit01", - "./test-ltp.sh ltp/testcases/bin/getrusage02", - "./test-ltp.sh ltp/testcases/bin/gettid02", - "./test-ltp.sh ltp/testcases/bin/getuid01", - "./test-ltp.sh ltp/testcases/bin/in6_01", - "./test-ltp.sh ltp/testcases/bin/ioctl_ns07", - "./test-ltp.sh ltp/testcases/bin/ioprio_get01", - "./test-ltp.sh ltp/testcases/bin/ioprio_set02", - "./test-ltp.sh ltp/testcases/bin/keyctl03", - "./test-ltp.sh ltp/testcases/bin/keyctl04", - "./test-ltp.sh ltp/testcases/bin/kill03", - "./test-ltp.sh ltp/testcases/bin/kill06", - "./test-ltp.sh ltp/testcases/bin/kill08", - "./test-ltp.sh ltp/testcases/bin/listen01", - "./test-ltp.sh ltp/testcases/bin/listxattr03", - "./test-ltp.sh ltp/testcases/bin/llistxattr03", - "./test-ltp.sh ltp/testcases/bin/llseek02", - "./test-ltp.sh ltp/testcases/bin/llseek03", - "./test-ltp.sh ltp/testcases/bin/locktests", - "./test-ltp.sh ltp/testcases/bin/lseek01", - "./test-ltp.sh ltp/testcases/bin/lseek07", - "./test-ltp.sh ltp/testcases/bin/ltpServer", - "./test-ltp.sh ltp/testcases/bin/madvise05", - "./test-ltp.sh ltp/testcases/bin/mallinfo01", - "./test-ltp.sh ltp/testcases/bin/mallinfo02", - "./test-ltp.sh ltp/testcases/bin/mallopt01", - "./test-ltp.sh ltp/testcases/bin/memcmp01", - "./test-ltp.sh ltp/testcases/bin/memcpy01", - "./test-ltp.sh ltp/testcases/bin/memset01", - "./test-ltp.sh ltp/testcases/bin/mkdirat01", - "./test-ltp.sh ltp/testcases/bin/mlock01", - "./test-ltp.sh ltp/testcases/bin/mlock04", - "./test-ltp.sh ltp/testcases/bin/mlockall01", - "./test-ltp.sh ltp/testcases/bin/mmap01", - "./test-ltp.sh ltp/testcases/bin/mmap02", - "./test-ltp.sh ltp/testcases/bin/mmap11", - "./test-ltp.sh ltp/testcases/bin/mmap19", - "./test-ltp.sh ltp/testcases/bin/mmap2", - "./test-ltp.sh ltp/testcases/bin/mmapstress04", - "./test-ltp.sh ltp/testcases/bin/mmstress_dummy", - "./test-ltp.sh ltp/testcases/bin/modify_ldt01", - "./test-ltp.sh ltp/testcases/bin/modify_ldt02", - "./test-ltp.sh ltp/testcases/bin/modify_ldt03", - "./test-ltp.sh ltp/testcases/bin/mprotect04", - "./test-ltp.sh ltp/testcases/bin/msgctl12", - "./test-ltp.sh ltp/testcases/bin/msync01", - "./test-ltp.sh ltp/testcases/bin/msync02", - "./test-ltp.sh ltp/testcases/bin/munlock01", - "./test-ltp.sh ltp/testcases/bin/newuname01", - "./test-ltp.sh ltp/testcases/bin/nextafter01", - "./test-ltp.sh ltp/testcases/bin/nfs05_make_tree", - "./test-ltp.sh ltp/testcases/bin/open01", - "./test-ltp.sh ltp/testcases/bin/open03", - "./test-ltp.sh ltp/testcases/bin/open04", - "./test-ltp.sh ltp/testcases/bin/openat01", - "./test-ltp.sh ltp/testcases/bin/pathconf01", - "./test-ltp.sh ltp/testcases/bin/personality02", - "./test-ltp.sh ltp/testcases/bin/pipe01", - "./test-ltp.sh ltp/testcases/bin/pipe03", - "./test-ltp.sh ltp/testcases/bin/pipe04", - "./test-ltp.sh ltp/testcases/bin/pipe05", - "./test-ltp.sh ltp/testcases/bin/pipe09", - "./test-ltp.sh ltp/testcases/bin/pipe14", - "./test-ltp.sh ltp/testcases/bin/poll01", - "./test-ltp.sh ltp/testcases/bin/prctl07", - "./test-ltp.sh ltp/testcases/bin/print_caps", - "./test-ltp.sh ltp/testcases/bin/proc01", - "./test-ltp.sh ltp/testcases/bin/pselect03", - "./test-ltp.sh ltp/testcases/bin/pselect03_64", - "./test-ltp.sh ltp/testcases/bin/read01", - "./test-ltp.sh ltp/testcases/bin/read04", - "./test-ltp.sh ltp/testcases/bin/readdir01", - "./test-ltp.sh ltp/testcases/bin/readv01", - "./test-ltp.sh ltp/testcases/bin/reboot01", - "./test-ltp.sh ltp/testcases/bin/recvmsg02", - "./test-ltp.sh ltp/testcases/bin/request_key01", - "./test-ltp.sh ltp/testcases/bin/request_key05", - "./test-ltp.sh ltp/testcases/bin/rmdir01", - "./test-ltp.sh ltp/testcases/bin/rpc_auth_destroy", - "./test-ltp.sh ltp/testcases/bin/rpc_authnone_create", - "./test-ltp.sh ltp/testcases/bin/rpc_authunix_create", - "./test-ltp.sh ltp/testcases/bin/rpc_authunix_create_default", - "./test-ltp.sh ltp/testcases/bin/rpc_callrpc_performance", - "./test-ltp.sh ltp/testcases/bin/rpc_callrpc_scalability", - "./test-ltp.sh ltp/testcases/bin/rpc_callrpc_stress", - "./test-ltp.sh ltp/testcases/bin/rpc_clnt_broadcast_performance", - "./test-ltp.sh ltp/testcases/bin/rpc_clnt_broadcast_scalability", - "./test-ltp.sh ltp/testcases/bin/rpc_clnt_broadcast_stress", - "./test-ltp.sh ltp/testcases/bin/rpc_clnt_destroy_stress", - "./test-ltp.sh ltp/testcases/bin/rpc_clntraw_create", - "./test-ltp.sh ltp/testcases/bin/rpc_clntraw_create_performance", - "./test-ltp.sh ltp/testcases/bin/rpc_svc_destroy", - "./test-ltp.sh ltp/testcases/bin/rpc_svc_destroy_stress", - "./test-ltp.sh ltp/testcases/bin/rpc_svcfd_create", - "./test-ltp.sh ltp/testcases/bin/rpc_svcfd_create_limits", - "./test-ltp.sh ltp/testcases/bin/rpc_svcraw_create", - "./test-ltp.sh ltp/testcases/bin/rpc_svcraw_create_performance", - "./test-ltp.sh ltp/testcases/bin/rpc_svctcp_create_performance", - "./test-ltp.sh ltp/testcases/bin/rpc_svcudp_create_performance", - "./test-ltp.sh ltp/testcases/bin/rpc_xprt_register", - "./test-ltp.sh ltp/testcases/bin/rpc_xprt_unregister", - "./test-ltp.sh ltp/testcases/bin/sbrk02", - "./test-ltp.sh ltp/testcases/bin/sched_setparam01", - // "./test-ltp.sh ltp/testcases/bin/sched_setscheduler01", - // "./test-ltp.sh ltp/testcases/bin/sched_tc2", - // "./test-ltp.sh ltp/testcases/bin/sched_tc3", - // "./test-ltp.sh ltp/testcases/bin/sched_tc4", - // "./test-ltp.sh ltp/testcases/bin/sched_tc5", - "./test-ltp.sh ltp/testcases/bin/sched_yield01", - "./test-ltp.sh ltp/testcases/bin/sendfile02", - "./test-ltp.sh ltp/testcases/bin/sendfile02_64", - "./test-ltp.sh ltp/testcases/bin/sendfile03", - "./test-ltp.sh ltp/testcases/bin/sendfile03_64", - "./test-ltp.sh ltp/testcases/bin/sendfile04", - "./test-ltp.sh ltp/testcases/bin/sendfile04_64", - "./test-ltp.sh ltp/testcases/bin/sendfile06", - "./test-ltp.sh ltp/testcases/bin/sendfile06_64", - "./test-ltp.sh ltp/testcases/bin/sendfile08", - "./test-ltp.sh ltp/testcases/bin/sendfile08_64", - "./test-ltp.sh ltp/testcases/bin/set_robust_list01", - "./test-ltp.sh ltp/testcases/bin/set_tid_address01", - "./test-ltp.sh ltp/testcases/bin/setfsuid02", - "./test-ltp.sh ltp/testcases/bin/setgid01", - "./test-ltp.sh ltp/testcases/bin/setgroups01", - "./test-ltp.sh ltp/testcases/bin/setitimer02", - "./test-ltp.sh ltp/testcases/bin/setpgid01", - "./test-ltp.sh ltp/testcases/bin/setpgrp01", - "./test-ltp.sh ltp/testcases/bin/setregid01", - "./test-ltp.sh ltp/testcases/bin/setreuid01", - "./test-ltp.sh ltp/testcases/bin/setrlimit04", - "./test-ltp.sh ltp/testcases/bin/setsid01", - "./test-ltp.sh ltp/testcases/bin/setsockopt03", - "./test-ltp.sh ltp/testcases/bin/setsockopt04", - "./test-ltp.sh ltp/testcases/bin/setuid01", - // "./test-ltp.sh ltp/testcases/bin/shmt02", - // "./test-ltp.sh ltp/testcases/bin/shmt03", - // "./test-ltp.sh ltp/testcases/bin/shmt04", - // "./test-ltp.sh ltp/testcases/bin/shmt06", - // "./test-ltp.sh ltp/testcases/bin/shmt07", - // "./test-ltp.sh ltp/testcases/bin/shmt08", - "./test-ltp.sh ltp/testcases/bin/sigaction01", - "./test-ltp.sh ltp/testcases/bin/sigaction02", - "./test-ltp.sh ltp/testcases/bin/sigaltstack01", - "./test-ltp.sh ltp/testcases/bin/signal02", - "./test-ltp.sh ltp/testcases/bin/signal03", - "./test-ltp.sh ltp/testcases/bin/signal04", - "./test-ltp.sh ltp/testcases/bin/signal05", - "./test-ltp.sh ltp/testcases/bin/time-schedule", - "./test-ltp.sh ltp/testcases/bin/times01", - "./test-ltp.sh ltp/testcases/bin/tkill01", - "./test-ltp.sh ltp/testcases/bin/tkill02", - "./test-ltp.sh ltp/testcases/bin/uname01", - "./test-ltp.sh ltp/testcases/bin/uname02", - "./test-ltp.sh ltp/testcases/bin/uname04", - "./test-ltp.sh ltp/testcases/bin/wait01", - "./test-ltp.sh ltp/testcases/bin/wait02", - "./test-ltp.sh ltp/testcases/bin/wait402", - "./test-ltp.sh ltp/testcases/bin/waitpid01", - "./test-ltp.sh ltp/testcases/bin/waitpid03", - "./test-ltp.sh ltp/testcases/bin/write06", - "./test-ltp.sh ltp/testcases/bin/writetest", + // "./test-ltp.sh ltp/testcases/bin/abs01", + // "./test-ltp.sh ltp/testcases/bin/accept01", + // "./test-ltp.sh ltp/testcases/bin/alarm02", + // "./test-ltp.sh ltp/testcases/bin/alarm03", + // "./test-ltp.sh ltp/testcases/bin/alarm05", + // "./test-ltp.sh ltp/testcases/bin/alarm06", + // "./test-ltp.sh ltp/testcases/bin/alarm07", + // "./test-ltp.sh ltp/testcases/bin/atof01", + // "./test-ltp.sh ltp/testcases/bin/chown01", + // "./test-ltp.sh ltp/testcases/bin/clock_nanosleep04", + // "./test-ltp.sh ltp/testcases/bin/close01", + // "./test-ltp.sh ltp/testcases/bin/close02", + // "./test-ltp.sh ltp/testcases/bin/clone01", + // "./test-ltp.sh ltp/testcases/bin/clone04", + // "./test-ltp.sh ltp/testcases/bin/confstr01", + // "./test-ltp.sh ltp/testcases/bin/creat03", + // "./test-ltp.sh ltp/testcases/bin/creat05", + // "./test-ltp.sh ltp/testcases/bin/diotest1", + // "./test-ltp.sh ltp/testcases/bin/diotest3", + // "./test-ltp.sh ltp/testcases/bin/diotest6", + // "./test-ltp.sh ltp/testcases/bin/dirty", + // "./test-ltp.sh ltp/testcases/bin/dup01", + // "./test-ltp.sh ltp/testcases/bin/dup02", + // "./test-ltp.sh ltp/testcases/bin/dup03", + // "./test-ltp.sh ltp/testcases/bin/dup04", + // "./test-ltp.sh ltp/testcases/bin/dup06", + // "./test-ltp.sh ltp/testcases/bin/dup07", + // "./test-ltp.sh ltp/testcases/bin/dup201", + // "./test-ltp.sh ltp/testcases/bin/dup202", + // "./test-ltp.sh ltp/testcases/bin/dup203", + // "./test-ltp.sh ltp/testcases/bin/dup204", + // "./test-ltp.sh ltp/testcases/bin/dup205", + // "./test-ltp.sh ltp/testcases/bin/dup206", + // "./test-ltp.sh ltp/testcases/bin/dup207", + // "./test-ltp.sh ltp/testcases/bin/dup3_01", + // "./test-ltp.sh ltp/testcases/bin/dup3_02", + // "./test-ltp.sh ltp/testcases/bin/exit02", + // "./test-ltp.sh ltp/testcases/bin/faccessat01", + // "./test-ltp.sh ltp/testcases/bin/faccessat02", + // "./test-ltp.sh ltp/testcases/bin/fchdir01", + // "./test-ltp.sh ltp/testcases/bin/fchmodat01", + // "./test-ltp.sh ltp/testcases/bin/fchown01", + // "./test-ltp.sh ltp/testcases/bin/fcntl02", + // "./test-ltp.sh ltp/testcases/bin/fcntl02_64", + // "./test-ltp.sh ltp/testcases/bin/fcntl03", + // "./test-ltp.sh ltp/testcases/bin/fcntl03_64", + // "./test-ltp.sh ltp/testcases/bin/fcntl04", + // "./test-ltp.sh ltp/testcases/bin/fcntl04_64", + // "./test-ltp.sh ltp/testcases/bin/fcntl08", + // "./test-ltp.sh ltp/testcases/bin/fcntl08_64", + // "./test-ltp.sh ltp/testcases/bin/fcntl29", + // "./test-ltp.sh ltp/testcases/bin/fcntl29_64", + // "./test-ltp.sh ltp/testcases/bin/fdatasync02", + // "./test-ltp.sh ltp/testcases/bin/flistxattr03", + // "./test-ltp.sh ltp/testcases/bin/flock01", + // "./test-ltp.sh ltp/testcases/bin/fork01", + // "./test-ltp.sh ltp/testcases/bin/fork03", + // "./test-ltp.sh ltp/testcases/bin/fork05", + // "./test-ltp.sh ltp/testcases/bin/fork07", + // "./test-ltp.sh ltp/testcases/bin/fork08", + // "./test-ltp.sh ltp/testcases/bin/fork09", + // "./test-ltp.sh ltp/testcases/bin/fork10", + // "./test-ltp.sh ltp/testcases/bin/fork_procs", + // "./test-ltp.sh ltp/testcases/bin/fpathconf01", + // "./test-ltp.sh ltp/testcases/bin/fptest01", + // "./test-ltp.sh ltp/testcases/bin/fptest02", + // "./test-ltp.sh ltp/testcases/bin/fs_perms", + // "./test-ltp.sh ltp/testcases/bin/futex_wait04", + // "./test-ltp.sh ltp/testcases/bin/genload", + // "./test-ltp.sh ltp/testcases/bin/genlog10", + // "./test-ltp.sh ltp/testcases/bin/getcontext01", + // "./test-ltp.sh ltp/testcases/bin/getcwd02", + // "./test-ltp.sh ltp/testcases/bin/getdomainname01", + // "./test-ltp.sh ltp/testcases/bin/geteuid01", + // "./test-ltp.sh ltp/testcases/bin/gethostbyname_r01", + // "./test-ltp.sh ltp/testcases/bin/gethostname01", + // "./test-ltp.sh ltp/testcases/bin/gethostname02", + // "./test-ltp.sh ltp/testcases/bin/getitimer01", + // "./test-ltp.sh ltp/testcases/bin/getitimer02", + // "./test-ltp.sh ltp/testcases/bin/getpagesize01", + // "./test-ltp.sh ltp/testcases/bin/getpgid02", + // "./test-ltp.sh ltp/testcases/bin/getpgrp01", + // "./test-ltp.sh ltp/testcases/bin/getppid01", + // "./test-ltp.sh ltp/testcases/bin/getrandom02", + // "./test-ltp.sh ltp/testcases/bin/getrandom04", + // "./test-ltp.sh ltp/testcases/bin/getresgid01", + // "./test-ltp.sh ltp/testcases/bin/getresuid01", + // "./test-ltp.sh ltp/testcases/bin/getrlimit01", + // "./test-ltp.sh ltp/testcases/bin/getrusage02", + // "./test-ltp.sh ltp/testcases/bin/gettid02", + // "./test-ltp.sh ltp/testcases/bin/getuid01", + // "./test-ltp.sh ltp/testcases/bin/in6_01", + // "./test-ltp.sh ltp/testcases/bin/ioctl_ns07", + // "./test-ltp.sh ltp/testcases/bin/ioprio_get01", + // "./test-ltp.sh ltp/testcases/bin/ioprio_set02", + // "./test-ltp.sh ltp/testcases/bin/keyctl03", + // "./test-ltp.sh ltp/testcases/bin/keyctl04", + // "./test-ltp.sh ltp/testcases/bin/kill03", + // "./test-ltp.sh ltp/testcases/bin/kill06", + // "./test-ltp.sh ltp/testcases/bin/kill08", + // "./test-ltp.sh ltp/testcases/bin/listen01", + // "./test-ltp.sh ltp/testcases/bin/listxattr03", + // "./test-ltp.sh ltp/testcases/bin/llistxattr03", + // "./test-ltp.sh ltp/testcases/bin/llseek02", + // "./test-ltp.sh ltp/testcases/bin/llseek03", + // "./test-ltp.sh ltp/testcases/bin/locktests", + // "./test-ltp.sh ltp/testcases/bin/lseek01", + // "./test-ltp.sh ltp/testcases/bin/lseek07", + // "./test-ltp.sh ltp/testcases/bin/ltpServer", + // "./test-ltp.sh ltp/testcases/bin/madvise05", + // "./test-ltp.sh ltp/testcases/bin/mallinfo01", + // "./test-ltp.sh ltp/testcases/bin/mallinfo02", + // "./test-ltp.sh ltp/testcases/bin/mallopt01", + // "./test-ltp.sh ltp/testcases/bin/memcmp01", + // "./test-ltp.sh ltp/testcases/bin/memcpy01", + // "./test-ltp.sh ltp/testcases/bin/memset01", + // "./test-ltp.sh ltp/testcases/bin/mkdirat01", + // "./test-ltp.sh ltp/testcases/bin/mlock01", + // "./test-ltp.sh ltp/testcases/bin/mlock04", + // "./test-ltp.sh ltp/testcases/bin/mlockall01", + // "./test-ltp.sh ltp/testcases/bin/mmap01", + // "./test-ltp.sh ltp/testcases/bin/mmap02", + // "./test-ltp.sh ltp/testcases/bin/mmap11", + // "./test-ltp.sh ltp/testcases/bin/mmap19", + // "./test-ltp.sh ltp/testcases/bin/mmap2", + // "./test-ltp.sh ltp/testcases/bin/mmapstress04", + // "./test-ltp.sh ltp/testcases/bin/mmstress_dummy", + // "./test-ltp.sh ltp/testcases/bin/modify_ldt01", + // "./test-ltp.sh ltp/testcases/bin/modify_ldt02", + // "./test-ltp.sh ltp/testcases/bin/modify_ldt03", + // "./test-ltp.sh ltp/testcases/bin/mprotect04", + // "./test-ltp.sh ltp/testcases/bin/msgctl12", + // "./test-ltp.sh ltp/testcases/bin/msync01", + // "./test-ltp.sh ltp/testcases/bin/msync02", + // "./test-ltp.sh ltp/testcases/bin/munlock01", + // "./test-ltp.sh ltp/testcases/bin/newuname01", + // "./test-ltp.sh ltp/testcases/bin/nextafter01", + // "./test-ltp.sh ltp/testcases/bin/nfs05_make_tree", + // "./test-ltp.sh ltp/testcases/bin/open01", + // "./test-ltp.sh ltp/testcases/bin/open03", + // "./test-ltp.sh ltp/testcases/bin/open04", + // "./test-ltp.sh ltp/testcases/bin/openat01", + // "./test-ltp.sh ltp/testcases/bin/pathconf01", + // "./test-ltp.sh ltp/testcases/bin/personality02", + // "./test-ltp.sh ltp/testcases/bin/pipe01", + // "./test-ltp.sh ltp/testcases/bin/pipe03", + // "./test-ltp.sh ltp/testcases/bin/pipe04", + // "./test-ltp.sh ltp/testcases/bin/pipe05", + // "./test-ltp.sh ltp/testcases/bin/pipe09", + // "./test-ltp.sh ltp/testcases/bin/pipe14", + // "./test-ltp.sh ltp/testcases/bin/poll01", + // "./test-ltp.sh ltp/testcases/bin/prctl07", + // "./test-ltp.sh ltp/testcases/bin/print_caps", + // "./test-ltp.sh ltp/testcases/bin/proc01", + // "./test-ltp.sh ltp/testcases/bin/pselect03", + // "./test-ltp.sh ltp/testcases/bin/pselect03_64", + // "./test-ltp.sh ltp/testcases/bin/read01", + // "./test-ltp.sh ltp/testcases/bin/read04", + // "./test-ltp.sh ltp/testcases/bin/readdir01", + // "./test-ltp.sh ltp/testcases/bin/readv01", + // "./test-ltp.sh ltp/testcases/bin/reboot01", + // "./test-ltp.sh ltp/testcases/bin/recvmsg02", + // "./test-ltp.sh ltp/testcases/bin/request_key01", + // "./test-ltp.sh ltp/testcases/bin/request_key05", + // "./test-ltp.sh ltp/testcases/bin/rmdir01", + // "./test-ltp.sh ltp/testcases/bin/rpc_auth_destroy", + // "./test-ltp.sh ltp/testcases/bin/rpc_authnone_create", + // "./test-ltp.sh ltp/testcases/bin/rpc_authunix_create", + // "./test-ltp.sh ltp/testcases/bin/rpc_authunix_create_default", + // "./test-ltp.sh ltp/testcases/bin/rpc_callrpc_performance", + // "./test-ltp.sh ltp/testcases/bin/rpc_callrpc_scalability", + // "./test-ltp.sh ltp/testcases/bin/rpc_callrpc_stress", + // "./test-ltp.sh ltp/testcases/bin/rpc_clnt_broadcast_performance", + // "./test-ltp.sh ltp/testcases/bin/rpc_clnt_broadcast_scalability", + // "./test-ltp.sh ltp/testcases/bin/rpc_clnt_broadcast_stress", + // "./test-ltp.sh ltp/testcases/bin/rpc_clnt_destroy_stress", + // "./test-ltp.sh ltp/testcases/bin/rpc_clntraw_create", + // "./test-ltp.sh ltp/testcases/bin/rpc_clntraw_create_performance", + // "./test-ltp.sh ltp/testcases/bin/rpc_svc_destroy", + // "./test-ltp.sh ltp/testcases/bin/rpc_svc_destroy_stress", + // "./test-ltp.sh ltp/testcases/bin/rpc_svcfd_create", + // "./test-ltp.sh ltp/testcases/bin/rpc_svcfd_create_limits", + // "./test-ltp.sh ltp/testcases/bin/rpc_svcraw_create", + // "./test-ltp.sh ltp/testcases/bin/rpc_svcraw_create_performance", + // "./test-ltp.sh ltp/testcases/bin/rpc_svctcp_create_performance", + // "./test-ltp.sh ltp/testcases/bin/rpc_svcudp_create_performance", + // "./test-ltp.sh ltp/testcases/bin/rpc_xprt_register", + // "./test-ltp.sh ltp/testcases/bin/rpc_xprt_unregister", + // "./test-ltp.sh ltp/testcases/bin/sbrk02", + // "./test-ltp.sh ltp/testcases/bin/sched_setparam01", + // "./test-ltp.sh ltp/testcases/bin/sched_yield01", + // "./test-ltp.sh ltp/testcases/bin/sendfile02", + // "./test-ltp.sh ltp/testcases/bin/sendfile02_64", + // "./test-ltp.sh ltp/testcases/bin/sendfile03", + // "./test-ltp.sh ltp/testcases/bin/sendfile03_64", + // "./test-ltp.sh ltp/testcases/bin/sendfile04", + // "./test-ltp.sh ltp/testcases/bin/sendfile04_64", + // "./test-ltp.sh ltp/testcases/bin/sendfile06", + // "./test-ltp.sh ltp/testcases/bin/sendfile06_64", + // "./test-ltp.sh ltp/testcases/bin/sendfile08", + // "./test-ltp.sh ltp/testcases/bin/sendfile08_64", + // "./test-ltp.sh ltp/testcases/bin/set_robust_list01", + // "./test-ltp.sh ltp/testcases/bin/set_tid_address01", + // "./test-ltp.sh ltp/testcases/bin/setfsuid02", + // "./test-ltp.sh ltp/testcases/bin/setgid01", + // "./test-ltp.sh ltp/testcases/bin/setgroups01", + // "./test-ltp.sh ltp/testcases/bin/setitimer02", + // "./test-ltp.sh ltp/testcases/bin/setpgid01", + // "./test-ltp.sh ltp/testcases/bin/setpgrp01", + // "./test-ltp.sh ltp/testcases/bin/setregid01", + // "./test-ltp.sh ltp/testcases/bin/setreuid01", + // "./test-ltp.sh ltp/testcases/bin/setrlimit04", + // "./test-ltp.sh ltp/testcases/bin/setsid01", + // "./test-ltp.sh ltp/testcases/bin/setsockopt03", + // "./test-ltp.sh ltp/testcases/bin/setsockopt04", + // "./test-ltp.sh ltp/testcases/bin/setuid01", + // "./test-ltp.sh ltp/testcases/bin/sigaction01", + // "./test-ltp.sh ltp/testcases/bin/sigaction02", + // "./test-ltp.sh ltp/testcases/bin/sigaltstack01", + // "./test-ltp.sh ltp/testcases/bin/signal02", + // "./test-ltp.sh ltp/testcases/bin/signal03", + // "./test-ltp.sh ltp/testcases/bin/signal04", + // "./test-ltp.sh ltp/testcases/bin/signal05", + // "./test-ltp.sh ltp/testcases/bin/time-schedule", + // "./test-ltp.sh ltp/testcases/bin/times01", + // "./test-ltp.sh ltp/testcases/bin/tkill01", + // "./test-ltp.sh ltp/testcases/bin/tkill02", + // "./test-ltp.sh ltp/testcases/bin/uname01", + // "./test-ltp.sh ltp/testcases/bin/uname02", + // "./test-ltp.sh ltp/testcases/bin/uname04", + // "./test-ltp.sh ltp/testcases/bin/wait01", + // "./test-ltp.sh ltp/testcases/bin/wait02", + // "./test-ltp.sh ltp/testcases/bin/wait402", + // "./test-ltp.sh ltp/testcases/bin/waitpid01", + // "./test-ltp.sh ltp/testcases/bin/waitpid03", + // "./test-ltp.sh ltp/testcases/bin/write06", + // "./test-ltp.sh ltp/testcases/bin/writetest", "busybox_testcode.sh", "lua_testcode.sh", "netperf_testcode.sh", diff --git a/user/src/bin/init_proc.rs b/user/src/bin/init_proc.rs index f5046c30..9eaf5f2e 100644 --- a/user/src/bin/init_proc.rs +++ b/user/src/bin/init_proc.rs @@ -29,6 +29,7 @@ fn run_cmd(cmd: &str) { #[no_mangle] fn main() -> i32 { run_cmd("busybox --install /bin"); + run_cmd("rm /bin/sh"); run_cmd("ln -s /lib/glibc/ld-linux-riscv64-lp64d.so.1 /lib/ld-linux-riscv64-lp64d.so.1 "); if fork() == 0 {