mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-26 10:53:25 +00:00
Add potential integer overflow check among Framework APIs
This commit is contained in:
committed by
Tate, Hongliang Tian
parent
dd64f58e55
commit
b450eef166
@ -79,11 +79,17 @@ impl IoMem {
|
||||
|
||||
pub fn resize(&mut self, range: Range<Paddr>) -> Result<()> {
|
||||
let start_vaddr = paddr_to_vaddr(range.start);
|
||||
if start_vaddr < self.virtual_address || start_vaddr >= self.virtual_address + self.limit {
|
||||
let virtual_end = self
|
||||
.virtual_address
|
||||
.checked_add(self.limit)
|
||||
.ok_or(Error::Overflow)?;
|
||||
if start_vaddr < self.virtual_address || start_vaddr >= virtual_end {
|
||||
return Err(Error::InvalidArgs);
|
||||
}
|
||||
let end_vaddr = start_vaddr + range.len();
|
||||
if end_vaddr <= self.virtual_address || end_vaddr > self.virtual_address + self.limit {
|
||||
let end_vaddr = start_vaddr
|
||||
.checked_add(range.len())
|
||||
.ok_or(Error::Overflow)?;
|
||||
if end_vaddr <= self.virtual_address || end_vaddr > virtual_end {
|
||||
return Err(Error::InvalidArgs);
|
||||
}
|
||||
self.virtual_address = start_vaddr;
|
||||
|
Reference in New Issue
Block a user