Handle AddrSpace munmap
This commit is contained in:
+4
-1
@@ -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()??)?;
|
||||
|
||||
@@ -117,7 +117,10 @@ pub fn resource(token: &mut CleanLockToken) -> Result<Vec<u8>> {
|
||||
|
||||
{
|
||||
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
|
||||
|
||||
+8
-2
@@ -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<const READ: bool, const WRITE: bool> CaptureGuard<READ, WRITE> {
|
||||
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(())
|
||||
|
||||
Reference in New Issue
Block a user