Add potential integer overflow check among Framework APIs

This commit is contained in:
Fabing Li
2024-03-25 15:49:02 +08:00
committed by Tate, Hongliang Tian
parent dd64f58e55
commit b450eef166
10 changed files with 61 additions and 14 deletions

View File

@ -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;