Write panic messages to logcat
We shouldn't panic, but if we do it would be nice to know why. By
default the info goes to stderr which isn't that helpful for binaries
using logcat.
(Code taken from system/security/diced/src/diced_main.rs.)
Test: Trigger panic, see logs
Change-Id: Ic2423837652415a51d78d3a4a6745ea2632cfa3b
diff --git a/compos/composd/src/composd_main.rs b/compos/composd/src/composd_main.rs
index 235c107..d1b711d 100644
--- a/compos/composd/src/composd_main.rs
+++ b/compos/composd/src/composd_main.rs
@@ -29,6 +29,7 @@
use anyhow::{Context, Result};
use compos_common::compos_client::VmInstance;
use log::{error, info};
+use std::panic;
use std::sync::Arc;
fn try_main() -> Result<()> {
@@ -38,6 +39,11 @@
android_logger::Config::default().with_tag("composd").with_min_level(log_level),
);
+ // Redirect panic messages to logcat.
+ panic::set_hook(Box::new(|panic_info| {
+ log::error!("{}", panic_info);
+ }));
+
ProcessState::start_thread_pool();
let virtualization_service = VmInstance::connect_to_virtualization_service()?;
diff --git a/compos/src/compsvc_main.rs b/compos/src/compsvc_main.rs
index c2923f0..ebb5514 100644
--- a/compos/src/compsvc_main.rs
+++ b/compos/src/compsvc_main.rs
@@ -38,6 +38,7 @@
use binder_common::rpc_server::run_rpc_server;
use compos_common::COMPOS_VSOCK_PORT;
use log::{debug, error};
+use std::panic;
/// The CID representing the host VM
const VMADDR_CID_HOST: u32 = 2;
@@ -59,6 +60,10 @@
android_logger::init_once(
android_logger::Config::default().with_tag("compsvc").with_min_level(log::Level::Debug),
);
+ // Redirect panic messages to logcat.
+ panic::set_hook(Box::new(|panic_info| {
+ log::error!("{}", panic_info);
+ }));
}
let service = compsvc::new_binder()?.as_binder();
diff --git a/compos/verify_key/verify_key.rs b/compos/verify_key/verify_key.rs
index 13d3c8b..9454442 100644
--- a/compos/verify_key/verify_key.rs
+++ b/compos/verify_key/verify_key.rs
@@ -27,6 +27,7 @@
};
use std::fs::{self, File};
use std::io::Read;
+use std::panic;
use std::path::{Path, PathBuf};
const MAX_FILE_SIZE_BYTES: u64 = 8 * 1024;
@@ -38,6 +39,11 @@
.with_min_level(log::Level::Info),
);
+ // Redirect panic messages to logcat.
+ panic::set_hook(Box::new(|panic_info| {
+ log::error!("{}", panic_info);
+ }));
+
if let Err(e) = try_main() {
log::error!("{:?}", e);
std::process::exit(-1)