diff --git a/kernel/src/device/fb.rs b/kernel/src/device/fb.rs index 9dc73ab64..f36bc08fe 100644 --- a/kernel/src/device/fb.rs +++ b/kernel/src/device/fb.rs @@ -5,7 +5,7 @@ use alloc::sync::Arc; use aster_framebuffer::{ColorMapEntry, FrameBuffer, PixelFormat, FRAMEBUFFER, MAX_CMAP_SIZE}; use device_id::{DeviceId, MajorId, MinorId}; use ostd::{ - mm::{io_util::HasVmReaderWriter, HasPaddr, HasSize}, + mm::{io_util::HasVmReaderWriter, HasPaddr, HasSize, VmIo}, Pod, }; diff --git a/kernel/src/device/pty/master.rs b/kernel/src/device/pty/master.rs index 2c673e313..62e0c1e12 100644 --- a/kernel/src/device/pty/master.rs +++ b/kernel/src/device/pty/master.rs @@ -2,7 +2,7 @@ use alloc::format; -use ostd::task::Task; +use ostd::{mm::VmIo, task::Task}; use super::{driver::PtyDriver, PtySlave}; use crate::{ diff --git a/kernel/src/device/tty/mod.rs b/kernel/src/device/tty/mod.rs index 8cdce8c11..87e50157f 100644 --- a/kernel/src/device/tty/mod.rs +++ b/kernel/src/device/tty/mod.rs @@ -6,7 +6,7 @@ use aster_console::{ AnyConsoleDevice, }; use device_id::{DeviceId, MajorId, MinorId}; -use ostd::sync::LocalIrqDisabled; +use ostd::{mm::VmIo, sync::LocalIrqDisabled}; use self::{line_discipline::LineDiscipline, termio::CFontOp}; use crate::{ @@ -214,7 +214,7 @@ impl Tty { let font_size = width.div_ceil(u8::BITS) * vpitch * charcount; let mut font_data = vec![0; font_size as usize]; - current_userspace!().read_bytes(*data as Vaddr, &mut (&mut font_data[..]).into())?; + current_userspace!().read_bytes(*data as Vaddr, &mut font_data[..])?; // In Linux, the most significant bit represents the first pixel, but `BitmapFont` requires // the least significant bit to represent the first pixel. So now we reverse the bits. diff --git a/kernel/src/fs/notify/inotify.rs b/kernel/src/fs/notify/inotify.rs index 37caf541c..7cf5ba751 100644 --- a/kernel/src/fs/notify/inotify.rs +++ b/kernel/src/fs/notify/inotify.rs @@ -14,7 +14,7 @@ use core::{ use bitflags::bitflags; use hashbrown::HashMap; use ostd::{ - mm::VmWriter, + mm::{VmIo, VmWriter}, sync::{Mutex, SpinLock}, }; diff --git a/kernel/src/process/clone.rs b/kernel/src/process/clone.rs index 80126b7eb..b630dbd1d 100644 --- a/kernel/src/process/clone.rs +++ b/kernel/src/process/clone.rs @@ -4,7 +4,8 @@ use alloc::borrow::Cow; use core::{num::NonZeroU64, sync::atomic::Ordering}; use ostd::{ - arch::cpu::context::UserContext, cpu::CpuId, sync::RwArc, task::Task, user::UserContextApi, + arch::cpu::context::UserContext, cpu::CpuId, mm::VmIo, sync::RwArc, task::Task, + user::UserContextApi, }; use super::{ @@ -677,11 +678,11 @@ fn clone_pidfd( // FIXME: Should we remove the file from the file table if the write operation fails? match ctx.user_space().write_val(pidfd_addr, &fd) { Ok(()) => Ok(()), - Err(e) => { + Err(err) => { let file_table = ctx.thread_local.borrow_file_table(); let mut file_table_locked = file_table.unwrap().write(); file_table_locked.close_file(fd); - Err(e) + Err(err.into()) } } } diff --git a/kernel/src/process/execve.rs b/kernel/src/process/execve.rs index 071f07888..1875c3e3b 100644 --- a/kernel/src/process/execve.rs +++ b/kernel/src/process/execve.rs @@ -3,6 +3,7 @@ use aster_rights::WriteOp; use ostd::{ arch::cpu::context::{FpuContext, GeneralRegs, UserContext}, + mm::VmIo, sync::Waiter, user::UserContextApi, }; diff --git a/kernel/src/process/posix_thread/exit.rs b/kernel/src/process/posix_thread/exit.rs index 87d8fff21..1bbd49365 100644 --- a/kernel/src/process/posix_thread/exit.rs +++ b/kernel/src/process/posix_thread/exit.rs @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MPL-2.0 -use ostd::task::Task; +use ostd::{mm::VmIo, task::Task}; use super::{ futex::futex_wake, robust_list::wake_robust_futex, thread_table, AsPosixThread, AsThreadLocal, diff --git a/kernel/src/process/posix_thread/robust_list.rs b/kernel/src/process/posix_thread/robust_list.rs index 3dc8fbd61..e8a4b21a0 100644 --- a/kernel/src/process/posix_thread/robust_list.rs +++ b/kernel/src/process/posix_thread/robust_list.rs @@ -2,7 +2,7 @@ //! The implementation of robust list is from occlum. -use ostd::task::Task; +use ostd::{mm::VmIo, task::Task}; use crate::{current_userspace, prelude::*, process::posix_thread::futex::futex_wake, thread::Tid}; diff --git a/kernel/src/process/process/terminal.rs b/kernel/src/process/process/terminal.rs index 3e8fa7404..33d68913d 100644 --- a/kernel/src/process/process/terminal.rs +++ b/kernel/src/process/process/terminal.rs @@ -2,6 +2,8 @@ use alloc::sync::Arc; +use ostd::mm::VmIo; + use super::{session::SessionGuard, JobControl, Pgid, Process, Session, Sid}; use crate::{ current_userspace, @@ -44,7 +46,7 @@ impl dyn Terminal { self.is_control_and(¤t!(), |_, _| Ok(operate()))? }; - current_userspace!().write_val::(arg, &pgid) + Ok(current_userspace!().write_val::(arg, &pgid)?) } // Commands about sessions @@ -80,7 +82,7 @@ impl dyn Terminal { self.is_control_and(¤t!(), |session, _| Ok(session.sid()))? }; - current_userspace!().write_val::(arg, &sid) + Ok(current_userspace!().write_val::(arg, &sid)?) } // Commands that are invalid or not supported diff --git a/kernel/src/process/signal/mod.rs b/kernel/src/process/signal/mod.rs index 1852514ff..c1e596f77 100644 --- a/kernel/src/process/signal/mod.rs +++ b/kernel/src/process/signal/mod.rs @@ -20,6 +20,7 @@ use c_types::{siginfo_t, ucontext_t}; use constants::SIGSEGV; use ostd::{ arch::cpu::context::{FpuContext, UserContext}, + mm::VmIo, user::UserContextApi, }; pub use pause::{with_sigmask_changed, Pause, PauseReason}; @@ -300,8 +301,7 @@ pub fn handle_user_signal( } } - let mut fpu_context_reader = VmReader::from(fpu_context_bytes); - user_space.write_bytes(fpu_context_addr as _, &mut fpu_context_reader)?; + user_space.write_bytes(fpu_context_addr as _, fpu_context_bytes)?; user_space.write_val(ucontext_addr as _, &ucontext)?; // Store the ucontext addr in sig context of current thread. diff --git a/kernel/src/syscall/capget.rs b/kernel/src/syscall/capget.rs index 884bafe09..7c88030a1 100644 --- a/kernel/src/syscall/capget.rs +++ b/kernel/src/syscall/capget.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{ prelude::*, diff --git a/kernel/src/syscall/capset.rs b/kernel/src/syscall/capset.rs index 71db3e7c7..c187a0810 100644 --- a/kernel/src/syscall/capset.rs +++ b/kernel/src/syscall/capset.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{ prelude::*, diff --git a/kernel/src/syscall/clock_gettime.rs b/kernel/src/syscall/clock_gettime.rs index a0a9e5d96..a0cba436e 100644 --- a/kernel/src/syscall/clock_gettime.rs +++ b/kernel/src/syscall/clock_gettime.rs @@ -3,6 +3,7 @@ use core::time::Duration; use int_to_c_enum::TryFromInt; +use ostd::mm::VmIo; use super::SyscallReturn; use crate::{ diff --git a/kernel/src/syscall/clone.rs b/kernel/src/syscall/clone.rs index 1412ab4bd..c768fdc5b 100644 --- a/kernel/src/syscall/clone.rs +++ b/kernel/src/syscall/clone.rs @@ -2,7 +2,7 @@ use core::num::NonZeroU64; -use ostd::arch::cpu::context::UserContext; +use ostd::{arch::cpu::context::UserContext, mm::VmIo}; use super::SyscallReturn; use crate::{ diff --git a/kernel/src/syscall/epoll.rs b/kernel/src/syscall/epoll.rs index 9224d8e4d..572aa13c1 100644 --- a/kernel/src/syscall/epoll.rs +++ b/kernel/src/syscall/epoll.rs @@ -2,6 +2,8 @@ use core::{sync::atomic::Ordering, time::Duration}; +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{ events::IoEvents, diff --git a/kernel/src/syscall/fcntl.rs b/kernel/src/syscall/fcntl.rs index e97f5c57e..09516860c 100644 --- a/kernel/src/syscall/fcntl.rs +++ b/kernel/src/syscall/fcntl.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{ fs::{ diff --git a/kernel/src/syscall/futex.rs b/kernel/src/syscall/futex.rs index df269c3d5..92edc714b 100644 --- a/kernel/src/syscall/futex.rs +++ b/kernel/src/syscall/futex.rs @@ -2,6 +2,8 @@ use core::time::Duration; +use ostd::mm::VmIo; + use crate::{ current_userspace, prelude::*, diff --git a/kernel/src/syscall/getcpu.rs b/kernel/src/syscall/getcpu.rs index 8e653c128..bfb5676eb 100644 --- a/kernel/src/syscall/getcpu.rs +++ b/kernel/src/syscall/getcpu.rs @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MPL-2.0 -use ostd::cpu::CpuId; +use ostd::{cpu::CpuId, mm::VmIo}; use super::SyscallReturn; use crate::prelude::*; diff --git a/kernel/src/syscall/getcwd.rs b/kernel/src/syscall/getcwd.rs index d0dc0ec7e..ae92079cb 100644 --- a/kernel/src/syscall/getcwd.rs +++ b/kernel/src/syscall/getcwd.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::prelude::*; @@ -11,8 +13,7 @@ pub fn sys_getcwd(buf: Vaddr, len: usize, ctx: &Context) -> Result { // perform a read at first let mut buffer = vec![0u8; len]; - ctx.user_space() - .read_bytes(start, &mut VmWriter::from(buffer.as_mut_slice()))?; + ctx.user_space().read_bytes(start, buffer.as_mut_slice())?; } MadviseBehavior::MADV_DONTNEED => { warn!("MADV_DONTNEED isn't implemented, do nothing for now."); diff --git a/kernel/src/syscall/nanosleep.rs b/kernel/src/syscall/nanosleep.rs index 938512766..9125688fa 100644 --- a/kernel/src/syscall/nanosleep.rs +++ b/kernel/src/syscall/nanosleep.rs @@ -2,7 +2,7 @@ use core::time::Duration; -use ostd::sync::Waiter; +use ostd::{mm::VmIo, sync::Waiter}; use super::{clock_gettime::read_clock, ClockId, SyscallReturn}; use crate::{ diff --git a/kernel/src/syscall/pipe.rs b/kernel/src/syscall/pipe.rs index 3e764b1e8..396f185f1 100644 --- a/kernel/src/syscall/pipe.rs +++ b/kernel/src/syscall/pipe.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{ fs::{ @@ -33,7 +35,7 @@ pub fn sys_pipe2(fds: Vaddr, flags: u32, ctx: &Context) -> Result if let Err(err) = ctx.user_space().write_val(fds, &pipe_fds) { file_table_locked.close_file(pipe_fds.reader_fd).unwrap(); file_table_locked.close_file(pipe_fds.writer_fd).unwrap(); - return Err(err); + return Err(err.into()); } Ok(SyscallReturn::Return(0)) diff --git a/kernel/src/syscall/poll.rs b/kernel/src/syscall/poll.rs index 6d6e574c1..e744eb613 100644 --- a/kernel/src/syscall/poll.rs +++ b/kernel/src/syscall/poll.rs @@ -2,6 +2,8 @@ use core::{cell::Cell, time::Duration}; +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{ events::IoEvents, diff --git a/kernel/src/syscall/ppoll.rs b/kernel/src/syscall/ppoll.rs index ed062791e..f94e62f71 100644 --- a/kernel/src/syscall/ppoll.rs +++ b/kernel/src/syscall/ppoll.rs @@ -2,6 +2,8 @@ use core::time::Duration; +use ostd::mm::VmIo; + use super::{poll::do_sys_poll, SyscallReturn}; use crate::{ prelude::*, diff --git a/kernel/src/syscall/prctl.rs b/kernel/src/syscall/prctl.rs index 2ef37f748..69e279e2c 100644 --- a/kernel/src/syscall/prctl.rs +++ b/kernel/src/syscall/prctl.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{ prelude::*, @@ -64,10 +66,8 @@ pub fn sys_prctl( } PrctlCmd::PR_GET_NAME(write_to_addr) => { let thread_name = ctx.posix_thread.thread_name().lock(); - ctx.user_space().write_bytes( - write_to_addr, - &mut VmReader::from(thread_name.name().to_bytes_with_nul()), - )?; + ctx.user_space() + .write_bytes(write_to_addr, thread_name.name().to_bytes_with_nul())?; } PrctlCmd::PR_SET_NAME(read_addr) => { let new_thread_name = ctx diff --git a/kernel/src/syscall/prlimit64.rs b/kernel/src/syscall/prlimit64.rs index 409d61e4b..90177ff22 100644 --- a/kernel/src/syscall/prlimit64.rs +++ b/kernel/src/syscall/prlimit64.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{ prelude::*, diff --git a/kernel/src/syscall/pselect6.rs b/kernel/src/syscall/pselect6.rs index cd78dc453..dbf084372 100644 --- a/kernel/src/syscall/pselect6.rs +++ b/kernel/src/syscall/pselect6.rs @@ -2,6 +2,8 @@ use core::time::Duration; +use ostd::mm::VmIo; + use super::{select::do_sys_select, SyscallReturn}; use crate::{ fs::file_table::FileDesc, diff --git a/kernel/src/syscall/readlink.rs b/kernel/src/syscall/readlink.rs index b56a872a3..141c8defd 100644 --- a/kernel/src/syscall/readlink.rs +++ b/kernel/src/syscall/readlink.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{ fs::{ @@ -37,7 +39,7 @@ pub fn sys_readlinkat( let linkpath = path.inode().read_link()?.to_string(); let bytes = linkpath.as_bytes(); let write_len = bytes.len().min(usr_buf_len); - user_space.write_bytes(usr_buf_addr, &mut VmReader::from(&bytes[..write_len]))?; + user_space.write_bytes(usr_buf_addr, &bytes[..write_len])?; Ok(SyscallReturn::Return(write_len as _)) } diff --git a/kernel/src/syscall/recvmsg.rs b/kernel/src/syscall/recvmsg.rs index 299ed7282..49594a4d8 100644 --- a/kernel/src/syscall/recvmsg.rs +++ b/kernel/src/syscall/recvmsg.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{ fs::file_table::{get_file_fast, FileDesc}, diff --git a/kernel/src/syscall/rt_sigaction.rs b/kernel/src/syscall/rt_sigaction.rs index f17f27c5e..d06879d9f 100644 --- a/kernel/src/syscall/rt_sigaction.rs +++ b/kernel/src/syscall/rt_sigaction.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{ prelude::*, diff --git a/kernel/src/syscall/rt_sigpending.rs b/kernel/src/syscall/rt_sigpending.rs index 797c9d526..4c907ee52 100644 --- a/kernel/src/syscall/rt_sigpending.rs +++ b/kernel/src/syscall/rt_sigpending.rs @@ -2,6 +2,8 @@ use core::sync::atomic::Ordering; +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{prelude::*, process::signal::HandlePendingSignal}; diff --git a/kernel/src/syscall/rt_sigprocmask.rs b/kernel/src/syscall/rt_sigprocmask.rs index f4bf080c8..2e5e1dd4e 100644 --- a/kernel/src/syscall/rt_sigprocmask.rs +++ b/kernel/src/syscall/rt_sigprocmask.rs @@ -2,6 +2,8 @@ use core::sync::atomic::Ordering; +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{ prelude::*, diff --git a/kernel/src/syscall/rt_sigreturn.rs b/kernel/src/syscall/rt_sigreturn.rs index 289efcf97..4e0caae8d 100644 --- a/kernel/src/syscall/rt_sigreturn.rs +++ b/kernel/src/syscall/rt_sigreturn.rs @@ -4,6 +4,7 @@ use core::sync::atomic::Ordering; use ostd::{ arch::cpu::context::{FpuContext, UserContext}, + mm::VmIo, user::UserContextApi, }; @@ -59,9 +60,8 @@ pub fn sys_rt_sigreturn(ctx: &Context, user_ctx: &mut UserContext) -> Result { check_and_ctl(semid, PermissionMode::READ, |sem_set| { let semid_ds = sem_set.semid_ds(); - ctx.user_space().write_val(arg as Vaddr, &semid_ds) + Ok(ctx.user_space().write_val(arg as Vaddr, &semid_ds)?) })?; } _ => todo!("Need to support {:?} in SYS_SEMCTL", cmd), diff --git a/kernel/src/syscall/semop.rs b/kernel/src/syscall/semop.rs index 0c707e42c..9b1bc58e6 100644 --- a/kernel/src/syscall/semop.rs +++ b/kernel/src/syscall/semop.rs @@ -2,6 +2,8 @@ use core::time::Duration; +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{ ipc::semaphore::system_v::{ diff --git a/kernel/src/syscall/sendfile.rs b/kernel/src/syscall/sendfile.rs index 1025c2a4e..49fb2bd42 100644 --- a/kernel/src/syscall/sendfile.rs +++ b/kernel/src/syscall/sendfile.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{ fs, diff --git a/kernel/src/syscall/sendmmsg.rs b/kernel/src/syscall/sendmmsg.rs index 103ceaf51..4f42eb459 100644 --- a/kernel/src/syscall/sendmmsg.rs +++ b/kernel/src/syscall/sendmmsg.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 +use ostd::mm::VmIo; + use crate::{ fs::file_table::FileDesc, net::socket::{util::SendRecvFlags, Socket}, diff --git a/kernel/src/syscall/sendmsg.rs b/kernel/src/syscall/sendmsg.rs index 28c2c0a5e..b7cc65120 100644 --- a/kernel/src/syscall/sendmsg.rs +++ b/kernel/src/syscall/sendmsg.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{ fs::file_table::FileDesc, diff --git a/kernel/src/syscall/set_robust_list.rs b/kernel/src/syscall/set_robust_list.rs index d63f6c0cc..95b09d4a0 100644 --- a/kernel/src/syscall/set_robust_list.rs +++ b/kernel/src/syscall/set_robust_list.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{prelude::*, process::posix_thread::RobustListHead}; diff --git a/kernel/src/syscall/setgroups.rs b/kernel/src/syscall/setgroups.rs index ea2b3b1d1..54c049029 100644 --- a/kernel/src/syscall/setgroups.rs +++ b/kernel/src/syscall/setgroups.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{prelude::*, process::Gid}; diff --git a/kernel/src/syscall/setitimer.rs b/kernel/src/syscall/setitimer.rs index 399234dc6..fd6811a61 100644 --- a/kernel/src/syscall/setitimer.rs +++ b/kernel/src/syscall/setitimer.rs @@ -2,6 +2,8 @@ use core::time::Duration; +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{ prelude::*, diff --git a/kernel/src/syscall/sigaltstack.rs b/kernel/src/syscall/sigaltstack.rs index e2e25ac29..c430105c0 100644 --- a/kernel/src/syscall/sigaltstack.rs +++ b/kernel/src/syscall/sigaltstack.rs @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MPL-2.0 -use ostd::{arch::cpu::context::UserContext, user::UserContextApi}; +use ostd::{arch::cpu::context::UserContext, mm::VmIo, user::UserContextApi}; use super::SyscallReturn; use crate::{ diff --git a/kernel/src/syscall/signalfd.rs b/kernel/src/syscall/signalfd.rs index 89716a995..8365a706d 100644 --- a/kernel/src/syscall/signalfd.rs +++ b/kernel/src/syscall/signalfd.rs @@ -12,6 +12,7 @@ use core::{ }; use bitflags::bitflags; +use ostd::mm::VmIo; use super::SyscallReturn; use crate::{ diff --git a/kernel/src/syscall/socketpair.rs b/kernel/src/syscall/socketpair.rs index ca46f0cda..d18f85301 100644 --- a/kernel/src/syscall/socketpair.rs +++ b/kernel/src/syscall/socketpair.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{ fs::{ diff --git a/kernel/src/syscall/stat.rs b/kernel/src/syscall/stat.rs index 302d25b8b..cc7732755 100644 --- a/kernel/src/syscall/stat.rs +++ b/kernel/src/syscall/stat.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{ fs::{ diff --git a/kernel/src/syscall/statfs.rs b/kernel/src/syscall/statfs.rs index 69a07eccd..82ff7a11c 100644 --- a/kernel/src/syscall/statfs.rs +++ b/kernel/src/syscall/statfs.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{ fs::{ diff --git a/kernel/src/syscall/statx.rs b/kernel/src/syscall/statx.rs index acb564e75..eaa762565 100644 --- a/kernel/src/syscall/statx.rs +++ b/kernel/src/syscall/statx.rs @@ -2,6 +2,8 @@ use core::time::Duration; +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{ fs::{file_table::FileDesc, fs_resolver::FsPath, path::Path}, diff --git a/kernel/src/syscall/sysinfo.rs b/kernel/src/syscall/sysinfo.rs index a6f26c10b..fcb672ca2 100644 --- a/kernel/src/syscall/sysinfo.rs +++ b/kernel/src/syscall/sysinfo.rs @@ -1,6 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 use aster_time::read_monotonic_time; +use ostd::mm::VmIo; use super::SyscallReturn; use crate::{prelude::*, process::process_table}; diff --git a/kernel/src/syscall/time.rs b/kernel/src/syscall/time.rs index c20b678ad..510d91d32 100644 --- a/kernel/src/syscall/time.rs +++ b/kernel/src/syscall/time.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{prelude::*, time::SystemTime}; diff --git a/kernel/src/syscall/timer_create.rs b/kernel/src/syscall/timer_create.rs index e96ab4c30..f99bc042f 100644 --- a/kernel/src/syscall/timer_create.rs +++ b/kernel/src/syscall/timer_create.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 +use ostd::mm::VmIo; + use super::{ clock_gettime::{DynamicClockIdInfo, DynamicClockType}, SyscallReturn, diff --git a/kernel/src/syscall/timer_settime.rs b/kernel/src/syscall/timer_settime.rs index ee4b2cac6..3b3bff581 100644 --- a/kernel/src/syscall/timer_settime.rs +++ b/kernel/src/syscall/timer_settime.rs @@ -2,6 +2,8 @@ use core::time::Duration; +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{ prelude::*, diff --git a/kernel/src/syscall/timerfd_gettime.rs b/kernel/src/syscall/timerfd_gettime.rs index 1de2cefcb..8f71038c0 100644 --- a/kernel/src/syscall/timerfd_gettime.rs +++ b/kernel/src/syscall/timerfd_gettime.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{ fs::file_table::FileDesc, diff --git a/kernel/src/syscall/timerfd_settime.rs b/kernel/src/syscall/timerfd_settime.rs index 3608229da..9d5494330 100644 --- a/kernel/src/syscall/timerfd_settime.rs +++ b/kernel/src/syscall/timerfd_settime.rs @@ -2,6 +2,8 @@ use core::time::Duration; +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{ fs::file_table::FileDesc, diff --git a/kernel/src/syscall/uname.rs b/kernel/src/syscall/uname.rs index 95862fb12..2653f59cb 100644 --- a/kernel/src/syscall/uname.rs +++ b/kernel/src/syscall/uname.rs @@ -1,4 +1,6 @@ // SPDX-License-Identifier: MPL-2.0 +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::prelude::*; diff --git a/kernel/src/syscall/utimens.rs b/kernel/src/syscall/utimens.rs index 4ebb3da3f..5ee041f83 100644 --- a/kernel/src/syscall/utimens.rs +++ b/kernel/src/syscall/utimens.rs @@ -2,6 +2,8 @@ use core::time::Duration; +use ostd::mm::VmIo; + use super::{constants::MAX_FILENAME_LEN, SyscallReturn}; use crate::{ fs, diff --git a/kernel/src/syscall/wait4.rs b/kernel/src/syscall/wait4.rs index 9db8a6e5f..a3a7a73f0 100644 --- a/kernel/src/syscall/wait4.rs +++ b/kernel/src/syscall/wait4.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 +use ostd::mm::VmIo; + use super::{getrusage::rusage_t, SyscallReturn}; use crate::{ prelude::*, diff --git a/kernel/src/syscall/waitid.rs b/kernel/src/syscall/waitid.rs index 2584f278c..1be52ae75 100644 --- a/kernel/src/syscall/waitid.rs +++ b/kernel/src/syscall/waitid.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 +use ostd::mm::VmIo; + use super::SyscallReturn; use crate::{ prelude::*, diff --git a/kernel/src/thread/task.rs b/kernel/src/thread/task.rs index eef82ab90..a3dcf873a 100644 --- a/kernel/src/thread/task.rs +++ b/kernel/src/thread/task.rs @@ -2,6 +2,7 @@ use ostd::{ arch::cpu::context::UserContext, + mm::VmIo, sync::Waiter, task::{Task, TaskOptions}, user::{ReturnReason, UserContextApi, UserMode}, diff --git a/kernel/src/util/net/addr/family.rs b/kernel/src/util/net/addr/family.rs index 47e69baa2..69d6e70b0 100644 --- a/kernel/src/util/net/addr/family.rs +++ b/kernel/src/util/net/addr/family.rs @@ -2,7 +2,7 @@ use core::cmp::min; -use ostd::task::Task; +use ostd::{mm::VmIo, task::Task}; use super::{ip::CSocketAddrInet, netlink::CSocketAddrNetlink, unix, vsock::CSocketAddrVm}; use crate::{current_userspace, net::socket::util::SocketAddr, prelude::*}; @@ -145,10 +145,7 @@ pub fn read_socket_addr_from_user(addr: Vaddr, addr_len: usize) -> Result { @@ -215,7 +212,7 @@ pub fn write_socket_addr_to_user( let actual_len = write_socket_addr_with_max_len(socket_addr, dest, max_len)?; - user_space.write_val(max_len_ptr, &actual_len) + Ok(user_space.write_val(max_len_ptr, &actual_len)?) } /// Writes a socket address to the user space. @@ -253,7 +250,7 @@ pub fn write_socket_addr_with_max_len( )?, SocketAddr::Unix(addr) => unix::into_c_bytes_and(addr, |bytes| { let written_len = min(bytes.len(), max_len as _); - current_userspace!().write_bytes(dest, &mut VmReader::from(&bytes[..written_len]))?; + current_userspace!().write_bytes(dest, &bytes[..written_len])?; Ok::(bytes.len()) })?, SocketAddr::Netlink(addr) => { @@ -280,10 +277,7 @@ where let actual_len = size_of::(); let written_len = min(actual_len, max_len); - current_userspace!().write_bytes( - dest, - &mut VmReader::from(&c_socket_addr.as_bytes()[..written_len]), - )?; + current_userspace!().write_bytes(dest, &c_socket_addr.as_bytes()[..written_len])?; Ok(actual_len) } diff --git a/kernel/src/util/net/options/socket.rs b/kernel/src/util/net/options/socket.rs index 5eb84f03d..b324972d0 100644 --- a/kernel/src/util/net/options/socket.rs +++ b/kernel/src/util/net/options/socket.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 +use ostd::mm::VmIo; + use super::RawSocketOption; use crate::{ current_userspace, impl_raw_sock_option_get_only, impl_raw_socket_option, diff --git a/kernel/src/util/net/options/utils.rs b/kernel/src/util/net/options/utils.rs index a5eaef2ea..decb2367f 100644 --- a/kernel/src/util/net/options/utils.rs +++ b/kernel/src/util/net/options/utils.rs @@ -2,6 +2,8 @@ use core::{num::NonZeroU8, time::Duration}; +use ostd::mm::VmIo; + use crate::{ current_userspace, net::socket::{ @@ -44,7 +46,7 @@ macro_rules! impl_read_write_for_32bit_type { if (max_len as usize) < size_of::<$pod_ty>() { return_errno_with_message!(Errno::EINVAL, "max_len is too short"); } - crate::current_userspace!().read_val::<$pod_ty>(addr) + Ok(crate::current_userspace!().read_val::<$pod_ty>(addr)?) } } @@ -174,11 +176,7 @@ impl ReadFromUser for CongestionControl { &mut bytes[..read_len] }; - // Clippy warns that `dst.as_mut` is redundant. However, using `dst` directly - // instead of `dst.as_mut` would take the ownership of `dst`. Consequently, - // the subsequent code that constructs `name` from `dst` would fail to compile. - #[expect(clippy::useless_asref)] - current_userspace!().read_bytes(addr, &mut VmWriter::from(dst.as_mut()))?; + current_userspace!().read_bytes(addr, dst.as_mut())?; let name = core::str::from_utf8(dst) .map_err(|_| Error::with_message(Errno::ENOENT, "non-UTF8 congestion name"))?; @@ -196,7 +194,7 @@ impl WriteToUser for CongestionControl { let write_len = TCP_CONGESTION_NAME_MAX.min(max_len) as usize; - current_userspace!().write_bytes(addr, &mut VmReader::from(&bytes[..write_len]))?; + current_userspace!().write_bytes(addr, &bytes[..write_len])?; Ok(write_len) }