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 <dverkamp@chromium.org>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Reviewed-by: Takaya Saeki <takayas@chromium.org>
Auto-Submit: Keiichi Watanabe <keiichiw@chromium.org>
This commit is contained in:
Keiichi Watanabe 2022-11-24 19:17:26 +09:00 committed by crosvm LUCI
parent ea7a5f2b3a
commit 2eb36ff983

View file

@ -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 {