Test copy_to_userspace function
This commit is contained in:
parent
6f7d1937e2
commit
a27aaceee9
3 changed files with 33 additions and 1 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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::*;
|
||||
|
||||
|
|
|
|||
30
library/std/src/sys/sgx/abi/usercalls/tests.rs
Normal file
30
library/std/src/sys/sgx/abi/usercalls/tests.rs
Normal 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]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue