From 135100a472c1fd261046bda51c897ea58a73d038 Mon Sep 17 00:00:00 2001 From: Chen Chengjun Date: Mon, 17 Mar 2025 10:35:31 +0800 Subject: [PATCH] Modify the getting-VMAR usages in other syscalls --- kernel/src/process/process_vm/heap.rs | 6 +++--- kernel/src/syscall/brk.rs | 2 +- kernel/src/syscall/madvise.rs | 3 ++- kernel/src/syscall/mmap.rs | 3 ++- kernel/src/syscall/mprotect.rs | 3 ++- kernel/src/syscall/munmap.rs | 3 ++- kernel/src/syscall/pread64.rs | 7 ++----- kernel/src/syscall/preadv.rs | 6 ++++-- kernel/src/syscall/pwrite64.rs | 7 ++----- kernel/src/syscall/pwritev.rs | 6 ++++-- kernel/src/syscall/read.rs | 7 ++----- kernel/src/syscall/recvfrom.rs | 6 ++---- kernel/src/syscall/recvmsg.rs | 3 ++- kernel/src/syscall/sendmsg.rs | 3 ++- kernel/src/syscall/sendto.rs | 6 ++---- kernel/src/syscall/write.rs | 7 ++----- kernel/src/util/iovec.rs | 12 ++++++------ kernel/src/util/net/socket.rs | 14 ++++++++++---- 18 files changed, 52 insertions(+), 52 deletions(-) diff --git a/kernel/src/process/process_vm/heap.rs b/kernel/src/process/process_vm/heap.rs index 3eb622b1..24d907b3 100644 --- a/kernel/src/process/process_vm/heap.rs +++ b/kernel/src/process/process_vm/heap.rs @@ -65,9 +65,9 @@ impl Heap { Ok(()) } - pub fn brk(&self, new_heap_end: Option) -> Result { - let current = current!(); - let root_vmar = current.root_vmar(); + pub fn brk(&self, new_heap_end: Option, ctx: &Context) -> Result { + let user_space = ctx.user_space(); + let root_vmar = user_space.root_vmar(); match new_heap_end { None => Ok(self.current_heap_end.load(Ordering::Relaxed)), Some(new_heap_end) => { diff --git a/kernel/src/syscall/brk.rs b/kernel/src/syscall/brk.rs index 80f96452..5e3da976 100644 --- a/kernel/src/syscall/brk.rs +++ b/kernel/src/syscall/brk.rs @@ -11,7 +11,7 @@ pub fn sys_brk(heap_end: u64, ctx: &Context) -> Result { }; debug!("new heap end = {:x?}", heap_end); let user_heap = ctx.process.heap(); - let new_heap_end = user_heap.brk(new_heap_end)?; + let new_heap_end = user_heap.brk(new_heap_end, ctx)?; Ok(SyscallReturn::Return(new_heap_end as _)) } diff --git a/kernel/src/syscall/madvise.rs b/kernel/src/syscall/madvise.rs index c7506e97..6e4bdb51 100644 --- a/kernel/src/syscall/madvise.rs +++ b/kernel/src/syscall/madvise.rs @@ -51,7 +51,8 @@ pub fn sys_madvise( } fn madv_free(start: Vaddr, end: Vaddr, ctx: &Context) -> Result<()> { - let root_vmar = ctx.process.root_vmar(); + let user_space = ctx.user_space(); + let root_vmar = user_space.root_vmar(); let advised_range = start..end; let _ = root_vmar.remove_mapping(advised_range); diff --git a/kernel/src/syscall/mmap.rs b/kernel/src/syscall/mmap.rs index 7db39416..5ebba19e 100644 --- a/kernel/src/syscall/mmap.rs +++ b/kernel/src/syscall/mmap.rs @@ -91,7 +91,8 @@ fn do_sys_mmap( vm_perms }; - let root_vmar = ctx.process.root_vmar(); + let user_space = ctx.user_space(); + let root_vmar = user_space.root_vmar(); let vm_map_options = { let mut options = root_vmar.new_map(len, vm_perms)?; let flags = option.flags; diff --git a/kernel/src/syscall/mprotect.rs b/kernel/src/syscall/mprotect.rs index f55c5f8d..144c18b7 100644 --- a/kernel/src/syscall/mprotect.rs +++ b/kernel/src/syscall/mprotect.rs @@ -11,7 +11,8 @@ pub fn sys_mprotect(addr: Vaddr, len: usize, perms: u64, ctx: &Context) -> Resul "addr = 0x{:x}, len = 0x{:x}, perms = {:?}", addr, len, vm_perms ); - let root_vmar = ctx.process.root_vmar(); + let user_space = ctx.user_space(); + let root_vmar = user_space.root_vmar(); // According to linux behavior, // , diff --git a/kernel/src/syscall/munmap.rs b/kernel/src/syscall/munmap.rs index 7ff04aca..7b96c3b1 100644 --- a/kernel/src/syscall/munmap.rs +++ b/kernel/src/syscall/munmap.rs @@ -18,7 +18,8 @@ pub fn sys_munmap(addr: Vaddr, len: usize, ctx: &Context) -> Result( - ctx: &'a Context, + user_space: &'a CurrentUserSpace<'a>, start_addr: Vaddr, count: usize, convert_iovec: impl Fn(&IoVec, &'a VmSpace) -> Result, ) -> Result> { - let vm_space = ctx.process.root_vmar().vm_space(); + let vm_space = user_space.root_vmar().vm_space(); let mut v = Vec::with_capacity(count); for idx in 0..count { @@ -96,11 +96,11 @@ pub struct VmWriterArray<'a>(Box<[VmWriter<'a>]>); impl<'a> VmReaderArray<'a> { /// Creates a new `IoVecReader` from user-provided io vec buffer. pub fn from_user_io_vecs( - ctx: &'a Context<'a>, + user_space: &'a CurrentUserSpace<'a>, start_addr: Vaddr, count: usize, ) -> Result { - let readers = copy_iovs_and_convert(ctx, start_addr, count, IoVec::reader)?; + let readers = copy_iovs_and_convert(user_space, start_addr, count, IoVec::reader)?; Ok(Self(readers)) } @@ -113,11 +113,11 @@ impl<'a> VmReaderArray<'a> { impl<'a> VmWriterArray<'a> { /// Creates a new `IoVecWriter` from user-provided io vec buffer. pub fn from_user_io_vecs( - ctx: &'a Context<'a>, + user_space: &'a CurrentUserSpace<'a>, start_addr: Vaddr, count: usize, ) -> Result { - let writers = copy_iovs_and_convert(ctx, start_addr, count, IoVec::writer)?; + let writers = copy_iovs_and_convert(user_space, start_addr, count, IoVec::writer)?; Ok(Self(writers)) } diff --git a/kernel/src/util/net/socket.rs b/kernel/src/util/net/socket.rs index e1990adc..b83005b4 100644 --- a/kernel/src/util/net/socket.rs +++ b/kernel/src/util/net/socket.rs @@ -112,11 +112,17 @@ impl CUserMsgHdr { Ok(()) } - pub fn copy_reader_array_from_user<'a>(&self, ctx: &'a Context) -> Result> { - VmReaderArray::from_user_io_vecs(ctx, self.msg_iov, self.msg_iovlen as usize) + pub fn copy_reader_array_from_user<'a>( + &self, + user_space: &'a CurrentUserSpace<'a>, + ) -> Result> { + VmReaderArray::from_user_io_vecs(user_space, self.msg_iov, self.msg_iovlen as usize) } - pub fn copy_writer_array_from_user<'a>(&self, ctx: &'a Context) -> Result> { - VmWriterArray::from_user_io_vecs(ctx, self.msg_iov, self.msg_iovlen as usize) + pub fn copy_writer_array_from_user<'a>( + &self, + user_space: &'a CurrentUserSpace<'a>, + ) -> Result> { + VmWriterArray::from_user_io_vecs(user_space, self.msg_iov, self.msg_iovlen as usize) } }