Add fn for validating user memory range bounds.

This commit is contained in:
4lDO2
2022-07-26 20:57:33 +02:00
parent 5bbfdcda6b
commit 939feacdc5

View File

@@ -5,6 +5,7 @@
use core::{mem, slice, str};
use crate::context;
use crate::memory::PAGE_SIZE;
use crate::paging::{Page, TableKind, VirtualAddress};
use crate::syscall::error::*;
@@ -108,3 +109,13 @@ pub fn validate_str(ptr: *const u8, len: usize) -> Result<&'static str> {
let slice = validate_slice(ptr, len)?;
str::from_utf8(slice).map_err(|_| Error::new(EINVAL))
}
pub fn validate_region(address: usize, size: usize) -> Result<(Page, usize)> {
if address % PAGE_SIZE != 0 || size % PAGE_SIZE != 0 || size == 0 {
return Err(Error::new(EINVAL));
}
if address.saturating_add(size) > crate::USER_END_OFFSET {
return Err(Error::new(EFAULT));
}
Ok((Page::containing_address(VirtualAddress::new(address)), size / PAGE_SIZE))
}