From 58660a91707cdebb12ed528eb5daffc1c41d7523 Mon Sep 17 00:00:00 2001 From: Wildan M Date: Fri, 24 Apr 2026 17:52:05 +0700 Subject: [PATCH] Handle AddrSpace munmap --- src/scheme/proc.rs | 5 ++++- src/scheme/sys/iostat.rs | 5 ++++- src/scheme/user.rs | 10 ++++++++-- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/scheme/proc.rs b/src/scheme/proc.rs index 4c982d44f4..47588e10d2 100644 --- a/src/scheme/proc.rs +++ b/src/scheme/proc.rs @@ -942,7 +942,10 @@ impl ContextHandle { let page_span = crate::syscall::validate_region(next()??, next()??)?; let unpin = false; - addrspace.munmap(page_span, unpin, token)?; + let res = addrspace.munmap(page_span, unpin, token)?; + for r in res { + let _ = r.unmap(token); + } } ADDRSPACE_OP_MPROTECT => { let page_span = crate::syscall::validate_region(next()??, next()??)?; diff --git a/src/scheme/sys/iostat.rs b/src/scheme/sys/iostat.rs index afdc008a88..ae4d9d6bae 100644 --- a/src/scheme/sys/iostat.rs +++ b/src/scheme/sys/iostat.rs @@ -117,7 +117,10 @@ pub fn resource(token: &mut CleanLockToken) -> Result> { { let addr_space = Arc::clone(context::current().read(token.token()).addr_space()?); - addr_space.munmap(PageSpan::new(fpath_page, page_count.get()), false, token)?; + let res = addr_space.munmap(PageSpan::new(fpath_page, page_count.get()), false, token)?; + for r in res { + let _ = r.unmap(token); + } } res diff --git a/src/scheme/user.rs b/src/scheme/user.rs index 30d461e1ec..0d3da35333 100644 --- a/src/scheme/user.rs +++ b/src/scheme/user.rs @@ -975,7 +975,10 @@ impl UserInner { drop(states_lock); let unpin = true; - AddrSpace::current()?.munmap(callee_responsible, unpin, token)?; + let res = AddrSpace::current()?.munmap(callee_responsible, unpin, token)?; + for r in res { + let _ = r.unmap(token); + } } }, // invalid state @@ -1330,7 +1333,10 @@ impl CaptureGuard { if let Some(ref addrsp) = self.addrsp && !self.span.is_empty() { - addrsp.munmap(self.span, unpin, token)?; + let res = addrsp.munmap(self.span, unpin, token)?; + for r in res { + let _ = r.unmap(token); + } } Ok(())