From 0ae364c8ebbe1ce7af2965f47f6b5cd7768cc0ae Mon Sep 17 00:00:00 2001 From: "fupan.lfp" Date: Fri, 28 May 2021 15:06:39 +0800 Subject: [PATCH] agent: re-enable the standard SIGPIPE behavior The Rust standard library had suppressed the default SIGPIPE behavior, see https://github.com/rust-lang/rust/pull/13158. Since the parent's signal handler would be inherited by it's child process, thus we should re-enable the standard SIGPIPE behavior as a workaround. Fixes: #1887 Signed-off-by: fupan.lfp --- src/agent/src/main.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/agent/src/main.rs b/src/agent/src/main.rs index 3ab3971988..1d5fbbbb5b 100644 --- a/src/agent/src/main.rs +++ b/src/agent/src/main.rs @@ -248,6 +248,7 @@ fn main() -> std::result::Result<(), Box> { } if args.len() == 2 && args[1] == "init" { + reset_sigpipe(); rustjail::container::init_child(); exit(0); } @@ -358,5 +359,16 @@ fn sethostname(hostname: &OsStr) -> Result<()> { } } +// The Rust standard library had suppressed the default SIGPIPE behavior, +// see https://github.com/rust-lang/rust/pull/13158. +// Since the parent's signal handler would be inherited by it's child process, +// thus we should re-enable the standard SIGPIPE behavior as a workaround to +// fix the issue of https://github.com/kata-containers/kata-containers/issues/1887. +fn reset_sigpipe() { + unsafe { + libc::signal(libc::SIGPIPE, libc::SIG_DFL); + } +} + use crate::config::AgentConfig; use std::os::unix::io::{FromRawFd, RawFd};