From 2eb36ff9836dfe94939969f393fae82d037e5990 Mon Sep 17 00:00:00 2001 From: Keiichi Watanabe Date: Thu, 24 Nov 2022 19:17:26 +0900 Subject: [PATCH] base: syslog: Preserve stderr FD when spawning We need to keep stderr FD when spawning processes. Otherwise, log messages won't be emitted to stderr. This affects the cases where we spawn device processes such as: * "crosvm run" without --disable-sandbox, * virtiofs device, which create its own jail, * "crosvm devices", which spawn sub processes BUG=none TEST=check log messages in virtio-{block,fs} are shown in stderr Change-Id: If60845d73290a42c863e6c6f4e75869644f659d0 Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/4054212 Commit-Queue: Daniel Verkamp Reviewed-by: Daniel Verkamp Reviewed-by: Takaya Saeki Auto-Submit: Keiichi Watanabe --- base/src/syslog.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/base/src/syslog.rs b/base/src/syslog.rs index e3654bcaf1..0021e0b624 100644 --- a/base/src/syslog.rs +++ b/base/src/syslog.rs @@ -66,6 +66,7 @@ use serde::Serialize; use sync::Mutex; use thiserror::Error as ThisError; +use crate::descriptor::AsRawDescriptor; use crate::platform::syslog::PlatformSyslog; use crate::platform::RawDescriptor; @@ -296,6 +297,7 @@ impl State { builder.filter_level(log::LevelFilter::Trace); builder.target(env_logger::Target::Stderr); loggers.push(Box::new(builder.build())); + descriptors.push(std::io::stderr().as_raw_descriptor()); } if let Some(fd) = cfg.pipe_fd {