Test copy_to_userspace function

This commit is contained in:
Raoul Strackx 2022-03-22 17:34:44 +01:00
parent 6f7d1937e2
commit a27aaceee9
3 changed files with 33 additions and 1 deletions

View file

@ -317,7 +317,7 @@ where
/// * The `dst` pointer is null
/// * The `src` memory range is not in enclave memory
/// * The `dst` memory range is not in user memory
unsafe fn copy_to_userspace(src: *const u8, dst: *mut u8, len: usize) {
pub(crate) unsafe fn copy_to_userspace(src: *const u8, dst: *mut u8, len: usize) {
unsafe fn copy_bytewise_to_userspace(src: *const u8, dst: *mut u8, len: usize) {
unsafe {
let seg_sel: u16 = 0;

View file

@ -6,6 +6,8 @@ use crate::time::{Duration, Instant};
pub(crate) mod alloc;
#[macro_use]
pub(crate) mod raw;
#[cfg(test)]
mod tests;
use self::raw::*;

View file

@ -0,0 +1,30 @@
use super::alloc::copy_to_userspace;
use super::alloc::User;
#[test]
fn test_copy_function() {
let mut src = [0u8; 100];
let mut dst = User::<[u8]>::uninitialized(100);
for i in 0..src.len() {
src[i] = i as _;
}
for size in 0..48 {
// For all possible alignment
for offset in 0..8 {
// overwrite complete dst
dst.copy_from_enclave(&[0u8; 100]);
// Copy src[0..size] to dst + offset
unsafe { copy_to_userspace(src.as_ptr(), dst.as_mut_ptr().offset(offset), size) };
// Verify copy
for byte in 0..size {
unsafe {
assert_eq!(*dst.as_ptr().offset(offset + byte as isize), src[byte as usize]);
}
}
}
}
}