[libos] Return error instead of overflow panic in vm
This commit is contained in:
parent
cd5c913dc7
commit
64bdd71a50
@ -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> {
|
||||
|
Loading…
Reference in New Issue
Block a user