From 414ae6d97432cbf5d188259ee211fbd221d7645a Mon Sep 17 00:00:00 2001 From: Jiaqi Gao Date: Thu, 7 Mar 2024 10:03:20 -0500 Subject: [PATCH 1/2] migtd: remove all the information output through `println` Replace them with `log::info` and `log::error`. Signed-off-by: Jiaqi Gao --- src/migtd/src/bin/migtd/main.rs | 12 ++++++------ src/migtd/src/ratls.rs | 15 +++++++-------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/migtd/src/bin/migtd/main.rs b/src/migtd/src/bin/migtd/main.rs index c3171c3d..90a13a65 100644 --- a/src/migtd/src/bin/migtd/main.rs +++ b/src/migtd/src/bin/migtd/main.rs @@ -7,9 +7,9 @@ extern crate alloc; +use log::info; use migtd::migration::{session::MigrationSession, MigrationResult}; use migtd::{config, event_log, migration}; -use td_payload::println; const MIGTD_VERSION: &str = env!("CARGO_PKG_VERSION"); @@ -45,7 +45,7 @@ pub fn runtime_main() { } fn basic_info() { - println!("MigTD Version - {}", MIGTD_VERSION); + info!("MigTD Version - {}", MIGTD_VERSION); } fn get_policy_and_measure(event_log: &mut [u8]) { @@ -74,7 +74,7 @@ fn handle_pre_mig() { panic!("Migration is not supported by VMM"); } // Loop to wait for request - println!("Loop to wait for request"); + info!("Loop to wait for request"); loop { let mut session = MigrationSession::new(); if session.wait_for_request().is_ok() { @@ -103,7 +103,7 @@ fn handle_pre_mig() { let coverage_len = minicov::get_coverage_data_size(); assert!(coverage_len < MAX_COVERAGE_DATA_PAGE_COUNT * td_paging::PAGE_SIZE); minicov::capture_coverage_to_buffer(&mut buffer[0..coverage_len]); - println!( + td_payload::println!( "coverage addr: {:x}, coverage len: {}", buffer.as_ptr() as u64, coverage_len @@ -129,11 +129,11 @@ fn test_memory() { #[cfg(feature = "test_stack_size")] { let value = td_benchmark::StackProfiling::stack_usage().unwrap(); - println!("max stack usage: {}", value); + td_payload::println!("max stack usage: {}", value); } #[cfg(feature = "test_heap_size")] { let value = td_benchmark::HeapProfiling::heap_usage().unwrap(); - println!("max heap usage: {}", value); + td_payload::println!("max heap usage: {}", value); } } diff --git a/src/migtd/src/ratls.rs b/src/migtd/src/ratls.rs index 0b166927..88497173 100644 --- a/src/migtd/src/ratls.rs +++ b/src/migtd/src/ratls.rs @@ -2,13 +2,8 @@ // // SPDX-License-Identifier: BSD-2-Clause-Patent -use alloc::{string::ToString, vec::Vec}; -use policy::PolicyError; -use rust_std_stub::io::{Read, Write}; -use td_payload::println; -use tdx_tdcall::TdCallError; - use crate::{event_log::get_event_log, mig_policy}; +use alloc::{string::ToString, vec::Vec}; use crypto::{ ecdsa::{ecdsa_verify, EcdsaPk}, hash::digest_sha384, @@ -19,6 +14,10 @@ use crypto::{ }, Error as CryptoError, Result as CryptoResult, }; +use log::error; +use policy::PolicyError; +use rust_std_stub::io::{Read, Write}; +use tdx_tdcall::TdCallError; type Result = core::result::Result; @@ -198,8 +197,8 @@ fn verify_peer_cert( ); if let Err(e) = &policy_check_result { - println!("Policy check failed, below is the detail information:"); - println!("{:x?}", e); + error!("Policy check failed, below is the detail information:"); + error!("{:x?}", e); } return policy_check_result.map_err(|e| match e { From fa0aba24f41487413ebc2944842a951b53a24712 Mon Sep 17 00:00:00 2001 From: Jiaqi Gao Date: Thu, 7 Mar 2024 10:04:31 -0500 Subject: [PATCH 2/2] xtask: add log level option to control migtd's log level Make log level of migtd crate configurable at compile time with `cargo image` command. The default level for debug is `info` and for release is `off`. Signed-off-by: Jiaqi Gao --- src/migtd/Cargo.toml | 2 +- xtask/src/build.rs | 47 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/src/migtd/Cargo.toml b/src/migtd/Cargo.toml index c7ab87d3..ead57d85 100644 --- a/src/migtd/Cargo.toml +++ b/src/migtd/Cargo.toml @@ -15,7 +15,7 @@ attestation = { path = "../attestation", default-features = false } cc-measurement = { path = "../../deps/td-shim/cc-measurement"} crypto = { path = "../crypto" } lazy_static = { version = "1.0", features = ["spin_no_std"] } -log = { version = "0.4.13", features = ["release_max_level_off"] } +log = { version = "0.4.13" } pci = { path="../devices/pci" } policy = {path = "../policy"} rust_std_stub = { path = "../std-support/rust-std-stub" } diff --git a/xtask/src/build.rs b/xtask/src/build.rs index 5b87430d..b49279e9 100644 --- a/xtask/src/build.rs +++ b/xtask/src/build.rs @@ -64,6 +64,9 @@ pub(crate) struct BuildArgs { /// Path of the configuration file for td-shim image layout #[clap(long)] image_layout: Option, + /// Log level control in migtd, default value is `off` for release and `info` for debug + #[clap(short, long)] + log_level: Option, } #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum)] @@ -71,6 +74,43 @@ enum Platform { Kvm, } +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum)] +enum LogLevel { + Off, + Error, + Warn, + Info, + Debug, + Trace, +} + +impl LogLevel { + // Log levels can be statically set at compile time via Cargo features and they are + // configured separately for release and debug build. + // This function is used to output feature for `migtd` crate to control its log level. + fn debug_feature(&self) -> &str { + match self { + LogLevel::Off => "log/max_level_off", + LogLevel::Error => "log/max_level_error", + LogLevel::Warn => "log/max_level_warn", + LogLevel::Info => "log/max_level_info", + LogLevel::Debug => "log/max_level_debug", + LogLevel::Trace => "log/max_level_trace", + } + } + + fn relase_feature(&self) -> &str { + match self { + LogLevel::Off => "log/release_max_level_off", + LogLevel::Error => "log/release_max_level_error", + LogLevel::Warn => "log/release_max_level_warn", + LogLevel::Info => "log/release_max_level_info", + LogLevel::Debug => "log/release_max_level_debug", + LogLevel::Trace => "log/release_max_level_trace", + } + } +} + impl BuildArgs { pub fn build(&self) -> Result { let (reset_vector, shim) = self.build_shim()?; @@ -225,6 +265,13 @@ impl BuildArgs { features.push_str(selected); } + features.push_str(","); + if self.debug { + features.push_str(self.log_level.unwrap_or(LogLevel::Info).debug_feature()); + } else { + features.push_str(self.log_level.unwrap_or(LogLevel::Off).relase_feature()); + } + features }