[libos] Fix envs overidden bug
This commit is contained in:
		
							parent
							
								
									0a367784cb
								
							
						
					
					
						commit
						242e0b63d2
					
				| @ -419,7 +419,8 @@ fn merge_env(env: *const *const c_char) -> Result<Vec<CString>> { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // Filter out env which are not listed in Occlum.json env untrusted section
 |     // Filter out env which are not listed in Occlum.json env untrusted section
 | ||||||
|     // and remove env default element if it is overrided
 |     // and record the index of env default element if it is overridden
 | ||||||
|  |     let mut remove_idx: Vec<usize> = Vec::new(); | ||||||
|     if (!env.is_null()) { |     if (!env.is_null()) { | ||||||
|         let env_untrusted = clone_cstrings_safely(env)?; |         let env_untrusted = clone_cstrings_safely(env)?; | ||||||
|         for iter in env_untrusted.iter() { |         for iter in env_untrusted.iter() { | ||||||
| @ -427,11 +428,20 @@ fn merge_env(env: *const *const c_char) -> Result<Vec<CString>> { | |||||||
|             if env_listed.contains(env_kv[0]) { |             if env_listed.contains(env_kv[0]) { | ||||||
|                 env_checked.push(iter.clone()); |                 env_checked.push(iter.clone()); | ||||||
|                 if let Some(idx) = env_default.helper.get(env_kv[0]) { |                 if let Some(idx) = env_default.helper.get(env_kv[0]) { | ||||||
|                     env_default.content.remove(*idx); |                     remove_idx.push(*idx); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     // Only keep items in env_default if they are not overridden by untrusted envs
 | ||||||
|  |     let mut env_keep: Vec<CString> = Vec::new(); | ||||||
|  |     for (idx, val) in env_default.content.iter().enumerate() { | ||||||
|  |         if !remove_idx.contains(&idx) { | ||||||
|  |             env_keep.push(CString::new(val.clone())?); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     trace!("env_checked from env untrusted: {:?}", env_checked); |     trace!("env_checked from env untrusted: {:?}", env_checked); | ||||||
|     Ok([env_default.content, env_checked].concat()) |     Ok([env_keep, env_checked].concat()) | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user