[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 {
|
match addr {
|
||||||
VMMapAddr::Any => {}
|
VMMapAddr::Any => {}
|
||||||
VMMapAddr::Hint(addr) => {
|
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);
|
let ret = self.mmap_with_addr(target_range, options);
|
||||||
if ret.is_ok() {
|
if ret.is_ok() {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
VMMapAddr::Need(addr) | VMMapAddr::Force(addr) => {
|
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);
|
return self.mmap_with_addr(target_range, options);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -237,7 +237,7 @@ impl VMManager {
|
|||||||
}
|
}
|
||||||
align_up(size, PAGE_SIZE)
|
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 chunk = {
|
||||||
let current = current!();
|
let current = current!();
|
||||||
let process_mem_chunks = current.vm().mem_chunks().read().unwrap();
|
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> {
|
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> {
|
pub fn new_empty(start: usize) -> Result<VMRange> {
|
||||||
|
Loading…
Reference in New Issue
Block a user