[libos] Return error instead of overflow panic in vm

This commit is contained in:
Shaowei Song 2022-03-24 12:15:31 +08:00 committed by Zongmin.Gu
parent cd5c913dc7
commit 64bdd71a50
2 changed files with 7 additions and 4 deletions

@ -74,14 +74,14 @@ impl VMManager {
match addr {
VMMapAddr::Any => {}
VMMapAddr::Hint(addr) => {
let target_range = VMRange::new(addr, addr + size)?;
let target_range = VMRange::new_with_size(addr, size)?;
let ret = self.mmap_with_addr(target_range, options);
if ret.is_ok() {
return ret;
}
}
VMMapAddr::Need(addr) | VMMapAddr::Force(addr) => {
let target_range = VMRange::new(addr, addr + size)?;
let target_range = VMRange::new_with_size(addr, size)?;
return self.mmap_with_addr(target_range, options);
}
}
@ -237,7 +237,7 @@ impl VMManager {
}
align_up(size, PAGE_SIZE)
};
let munmap_range = { VMRange::new(addr, addr + size) }?;
let munmap_range = { VMRange::new_with_size(addr, size) }?;
let chunk = {
let current = current!();
let process_mem_chunks = current.vm().mem_chunks().read().unwrap();

@ -18,7 +18,10 @@ impl VMRange {
}
pub fn new_with_size(start: usize, size: usize) -> Result<VMRange> {
Self::new(start, start + size)
let end = start
.checked_add(size)
.ok_or_else(|| errno!(EINVAL, "end address overflow"))?;
Self::new(start, end)
}
pub fn new_empty(start: usize) -> Result<VMRange> {