[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