Merge "VM payload's stdout/err is /dev/kmsg in debuggable VMs" into main am: 241eb4c4e4
Original change: https://android-review.googlesource.com/c/platform/packages/modules/Virtualization/+/3420180
Change-Id: Id8ef779aa47a31cff55dbada64e2a99e3053d51a
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/guest/microdroid_manager/microdroid_manager.rc b/guest/microdroid_manager/microdroid_manager.rc
index da38564..9fa8a9d 100644
--- a/guest/microdroid_manager/microdroid_manager.rc
+++ b/guest/microdroid_manager/microdroid_manager.rc
@@ -2,8 +2,6 @@
disabled
# print android log to kmsg
file /dev/kmsg w
- # redirect stdout/stderr to kmsg_debug
- stdio_to_kmsg
setenv RUST_LOG info
# TODO(jooyung) remove this when microdroid_manager becomes a daemon
oneshot
diff --git a/guest/microdroid_manager/src/main.rs b/guest/microdroid_manager/src/main.rs
index 4b261c4..451c3c8 100644
--- a/guest/microdroid_manager/src/main.rs
+++ b/guest/microdroid_manager/src/main.rs
@@ -670,9 +670,20 @@
});
}
- if !is_debuggable()? {
- command.stdin(Stdio::null()).stdout(Stdio::null()).stderr(Stdio::null());
- }
+ // Never accept input from outside
+ command.stdin(Stdio::null());
+
+ // If the VM is debuggable, let stdout/stderr go outside via /dev/kmsg to ease the debugging
+ let (stdout, stderr) = if is_debuggable()? {
+ use std::os::fd::FromRawFd;
+ let kmsg_fd = env::var("ANDROID_FILE__dev_kmsg").unwrap().parse::<i32>().unwrap();
+ // SAFETY: no one closes kmsg_fd
+ unsafe { (Stdio::from_raw_fd(kmsg_fd), Stdio::from_raw_fd(kmsg_fd)) }
+ } else {
+ (Stdio::null(), Stdio::null())
+ };
+ command.stdout(stdout);
+ command.stderr(stderr);
info!("notifying payload started");
service.notifyPayloadStarted()?;