diff --git a/src/libos/src/vm/process_vm.rs b/src/libos/src/vm/process_vm.rs index 3887ef78..adde03a2 100644 --- a/src/libos/src/vm/process_vm.rs +++ b/src/libos/src/vm/process_vm.rs @@ -108,11 +108,7 @@ impl<'a, 'b> ProcessVMBuilder<'a, 'b> { // Now that we end up with the memory layout required by the process, // let's allocate the memory for the process - let process_range = { - // TODO: ensure alignment through USER_SPACE_VM_MANAGER, not by - // preserving extra space for alignment - USER_SPACE_VM_MANAGER.alloc(process_layout.align() + process_layout.size())? - }; + let process_range = { USER_SPACE_VM_MANAGER.alloc(process_layout)? }; let process_base = process_range.range().start(); // Use the vm_manager to manage the whole process VM (including mmap region) let mut vm_manager = VMManager::from(process_base, process_range.range().size())?; diff --git a/src/libos/src/vm/user_space_vm.rs b/src/libos/src/vm/user_space_vm.rs index 7e01a1c5..c2466ff0 100644 --- a/src/libos/src/vm/user_space_vm.rs +++ b/src/libos/src/vm/user_space_vm.rs @@ -16,7 +16,8 @@ impl UserSpaceVMManager { } } - pub fn alloc(&self, size: usize) -> Result { + pub fn alloc(&self, vm_layout: VMLayout) -> Result { + let size = align_up(vm_layout.size(), vm_layout.align()); let vm_range = unsafe { let ptr = sgx_alloc_rsrv_mem(size); let perm = MemPerm::READ | MemPerm::WRITE;