File tree 3 files changed +33
-1
lines changed
library/std/src/sys/sgx/abi/usercalls
3 files changed +33
-1
lines changed Original file line number Diff line number Diff line change @@ -317,7 +317,7 @@ where
317
317
/// * The `dst` pointer is null
318
318
/// * The `src` memory range is not in enclave memory
319
319
/// * The `dst` memory range is not in user memory
320
- unsafe fn copy_to_userspace ( src : * const u8 , dst : * mut u8 , len : usize ) {
320
+ pub ( crate ) unsafe fn copy_to_userspace ( src : * const u8 , dst : * mut u8 , len : usize ) {
321
321
unsafe fn copy_bytewise_to_userspace ( src : * const u8 , dst : * mut u8 , len : usize ) {
322
322
unsafe {
323
323
let seg_sel: u16 = 0 ;
Original file line number Diff line number Diff line change @@ -6,6 +6,8 @@ use crate::time::{Duration, Instant};
6
6
pub ( crate ) mod alloc;
7
7
#[ macro_use]
8
8
pub ( crate ) mod raw;
9
+ #[ cfg( test) ]
10
+ mod tests;
9
11
10
12
use self :: raw:: * ;
11
13
Original file line number Diff line number Diff line change
1
+ use super :: alloc:: copy_to_userspace;
2
+ use super :: alloc:: User ;
3
+
4
+ #[ test]
5
+ fn test_copy_function ( ) {
6
+ let mut src = [ 0u8 ; 100 ] ;
7
+ let mut dst = User :: < [ u8 ] > :: uninitialized ( 100 ) ;
8
+
9
+ for i in 0 ..src. len ( ) {
10
+ src[ i] = i as _ ;
11
+ }
12
+
13
+ for size in 0 ..48 {
14
+ // For all possible alignment
15
+ for offset in 0 ..8 {
16
+ // overwrite complete dst
17
+ dst. copy_from_enclave ( & [ 0u8 ; 100 ] ) ;
18
+
19
+ // Copy src[0..size] to dst + offset
20
+ unsafe { copy_to_userspace ( src. as_ptr ( ) , dst. as_mut_ptr ( ) . offset ( offset) , size) } ;
21
+
22
+ // Verify copy
23
+ for byte in 0 ..size {
24
+ unsafe {
25
+ assert_eq ! ( * dst. as_ptr( ) . offset( offset + byte as isize ) , src[ byte as usize ] ) ;
26
+ }
27
+ }
28
+ }
29
+ }
30
+ }
You can’t perform that action at this time.
0 commit comments