Fix running user application with too many arguments
Also fix the VM drop process when creating process failure
This commit is contained in:
		
							parent
							
								
									fa69b3d0d1
								
							
						
					
					
						commit
						56569e2b8e
					
				| @ -233,7 +233,12 @@ fn new_process_common( | ||||
|             }; | ||||
|             let user_stack_base = vm.get_stack_base(); | ||||
|             let user_stack_limit = vm.get_stack_limit(); | ||||
|             let user_rsp = init_stack::do_init(user_stack_base, 4096, &argv, envp, &mut auxvec)?; | ||||
|             let init_stack_size = min( | ||||
|                 max(vm.get_stack_range().size() >> 8, 4096), | ||||
|                 vm.get_stack_range().size(), | ||||
|             ); // size in [4096, stack_range], by default 1/256 of stack range
 | ||||
|             let user_rsp = | ||||
|                 init_stack::do_init(user_stack_base, init_stack_size, &argv, envp, &mut auxvec)?; | ||||
|             unsafe { | ||||
|                 Task::new( | ||||
|                     ldso_entry, | ||||
|  | ||||
| @ -269,15 +269,12 @@ impl Drop for ProcessVM { | ||||
|         //
 | ||||
|         // For the first case, the process VM is cleaned in the exit procedure and nothing is needed. For the second cases, mem_chunks is not empty and should
 | ||||
|         // be cleaned here.
 | ||||
|         mem_chunks | ||||
|             .drain_filter(|chunk| chunk.is_single_vma()) | ||||
|             .for_each(|chunk| { | ||||
|                 USER_SPACE_VM_MANAGER.internal().munmap_chunk(&chunk, None); | ||||
|             }); | ||||
| 
 | ||||
|         // In the first case, the current is reset to idle thread
 | ||||
|         // In the second case, the current thread belongs to parent process
 | ||||
|         let current = current!(); | ||||
|         if current.tid() != 0 { | ||||
|             mem_chunks | ||||
|                 .drain_filter(|chunk| chunk.is_single_vma()) | ||||
|                 .for_each(|chunk| USER_SPACE_VM_MANAGER.free_chunk(&chunk)) | ||||
|         } | ||||
|         assert!(mem_chunks.len() == 0); | ||||
|         info!("Process VM dropped"); | ||||
|     } | ||||
|  | ||||
| @ -38,7 +38,7 @@ impl VMManager { | ||||
|         &self.range | ||||
|     } | ||||
| 
 | ||||
|     fn internal(&self) -> SgxMutexGuard<InternalVMManager> { | ||||
|     pub fn internal(&self) -> SgxMutexGuard<InternalVMManager> { | ||||
|         self.internal.lock().unwrap() | ||||
|     } | ||||
| 
 | ||||
| @ -505,7 +505,7 @@ impl VMManager { | ||||
|         }); | ||||
|         mem_chunks.clear(); | ||||
| 
 | ||||
|         debug_assert!(mem_chunks.len() == 0); | ||||
|         assert!(mem_chunks.len() == 0); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user