[libos] Add disable_log cfg option
This commit is contained in:
		
							parent
							
								
									5d3799fcb8
								
							
						
					
					
						commit
						75b5f84ec6
					
				| @ -1,5 +1,6 @@ | ||||
| use super::*; | ||||
| use crate::std::untrusted::path::PathEx; | ||||
| use crate::util::sgx::allow_debug as sgx_allow_debug; | ||||
| use serde::{Deserialize, Serialize}; | ||||
| use std::collections::HashSet; | ||||
| use std::ffi::CString; | ||||
| @ -10,6 +11,8 @@ use std::sgxfs::SgxFile; | ||||
| 
 | ||||
| use crate::util::mem_util::from_user; | ||||
| 
 | ||||
| use log::{set_max_level, LevelFilter}; | ||||
| 
 | ||||
| lazy_static! { | ||||
|     pub static ref LIBOS_CONFIG: Config = { | ||||
|         let config_path = | ||||
| @ -200,6 +203,20 @@ impl Config { | ||||
|         }; | ||||
|         let feature = ConfigFeature::from_input(&input.feature)?; | ||||
| 
 | ||||
|         if input.disable_log { | ||||
|             log::set_max_level(LevelFilter::Off); | ||||
|         } else if !sgx_allow_debug() { | ||||
|             if log::max_level() != LevelFilter::Off { | ||||
|                 // Release enclave can only set error level log
 | ||||
|                 log::set_max_level(LevelFilter::Error); | ||||
|             } | ||||
|             eprintln!("Warnning: Occlum Log is enabled for release enclave!"); | ||||
|             eprintln!( | ||||
|                 "Uses can disable Occlum Log by setting metadata.disable_log=true \ | ||||
|                 in Occlum.json and rebuild Occlum instance.\n" | ||||
|             ); | ||||
|         } | ||||
| 
 | ||||
|         Ok(Config { | ||||
|             resource_limits, | ||||
|             process, | ||||
| @ -385,6 +402,8 @@ struct InputConfig { | ||||
|     #[serde(default)] | ||||
|     pub env: InputConfigEnv, | ||||
|     #[serde(default)] | ||||
|     pub disable_log: bool, | ||||
|     #[serde(default)] | ||||
|     pub app: Vec<InputConfigApp>, | ||||
|     #[serde(default)] | ||||
|     pub feature: InputConfigFeature, | ||||
|  | ||||
| @ -60,24 +60,17 @@ pub extern "C" fn occlum_ecall_init( | ||||
| 
 | ||||
|     assert!(!instance_dir.is_null()); | ||||
| 
 | ||||
|     let log_level = { | ||||
|         let input_log_level = match parse_log_level(log_level) { | ||||
|             Err(e) => { | ||||
|                 eprintln!("invalid log level: {}", e.backtrace()); | ||||
|                 return ecall_errno!(EINVAL); | ||||
|             } | ||||
|             Ok(log_level) => log_level, | ||||
|         }; | ||||
|         // Use the input log level if and only if the enclave allows debug
 | ||||
|         if sgx_allow_debug() { | ||||
|             input_log_level | ||||
|         } else { | ||||
|             LevelFilter::Off | ||||
|     let log_level = match parse_log_level(log_level) { | ||||
|         Err(e) => { | ||||
|             eprintln!("invalid log level: {}", e.backtrace()); | ||||
|             return ecall_errno!(EINVAL); | ||||
|         } | ||||
|         Ok(log_level) => log_level, | ||||
|     }; | ||||
| 
 | ||||
|     INIT_ONCE.call_once(|| { | ||||
|         // Init the log infrastructure first so that log messages will be printed afterwards
 | ||||
|         // The log level may be set to off later if disable_log is true in user configuration
 | ||||
|         util::log::init(log_level); | ||||
| 
 | ||||
|         let report = rsgx_self_report(); | ||||
|  | ||||
| @ -487,6 +487,20 @@ fn main() { | ||||
|             app_config.unwrap() | ||||
|         }; | ||||
| 
 | ||||
|         // If the user doesn't provide a value, set it false unless it is release enclave.
 | ||||
|         // If the user provides a value, just use it.
 | ||||
|         let disable_log = { | ||||
|             if occlum_config.metadata.disable_log.is_none() { | ||||
|                 if occlum_config.metadata.debuggable { | ||||
|                     false | ||||
|                 } else { | ||||
|                     true | ||||
|                 } | ||||
|             } else { | ||||
|                 occlum_config.metadata.disable_log.unwrap() | ||||
|             } | ||||
|         }; | ||||
| 
 | ||||
|         let occlum_json_config = InternalOcclumJson { | ||||
|             resource_limits: InternalResourceLimits { | ||||
|                 user_space_init_size: config_user_space_init_size.to_string() + "B", | ||||
| @ -498,6 +512,7 @@ fn main() { | ||||
|                 default_mmap_size: occlum_config.process.default_mmap_size, | ||||
|             }, | ||||
|             env: occlum_config.env, | ||||
|             disable_log: disable_log, | ||||
|             app: app_config, | ||||
|             feature: occlum_config.feature.clone(), | ||||
|         }; | ||||
| @ -728,6 +743,8 @@ struct OcclumMetadata { | ||||
|     product_id: u32, | ||||
|     version_number: u32, | ||||
|     debuggable: bool, | ||||
|     #[serde(default)] | ||||
|     disable_log: Option<bool>, | ||||
|     enable_kss: bool, | ||||
|     family_id: OcclumMetaID, | ||||
|     ext_prod_id: OcclumMetaID, | ||||
| @ -823,6 +840,7 @@ struct InternalOcclumJson { | ||||
|     resource_limits: InternalResourceLimits, | ||||
|     process: OcclumProcess, | ||||
|     env: serde_json::Value, | ||||
|     disable_log: bool, | ||||
|     app: serde_json::Value, | ||||
|     feature: OcclumFeature, | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user