diff --git a/src/main.rs b/src/main.rs index 86d805620..8e12a55ca 100644 --- a/src/main.rs +++ b/src/main.rs @@ -561,6 +561,11 @@ fn start_vmm(cmd_arguments: ArgMatches) -> Result, Error> { .ok(); } + // SAFETY: Trivially safe. + unsafe { + libc::signal(libc::SIGCHLD, libc::SIG_IGN); + } + // Before we start any threads, mask the signals we'll be // installing handlers for, to make sure they only ever run on the // dedicated signal handling thread we'll start in a bit. diff --git a/vmm/src/sigwinch_listener.rs b/vmm/src/sigwinch_listener.rs index 0aad87853..716bf2c61 100644 --- a/vmm/src/sigwinch_listener.rs +++ b/vmm/src/sigwinch_listener.rs @@ -6,7 +6,7 @@ use arch::_NSIG; use libc::{ c_int, c_void, close, fork, getpgrp, ioctl, pipe2, poll, pollfd, setsid, sigemptyset, siginfo_t, signal, sigprocmask, syscall, tcgetpgrp, tcsetpgrp, SYS_close_range, EINVAL, ENOSYS, - ENOTTY, O_CLOEXEC, POLLERR, SIGWINCH, SIG_DFL, SIG_SETMASK, STDERR_FILENO, TIOCSCTTY, + ENOTTY, O_CLOEXEC, POLLERR, SIGCHLD, SIGWINCH, SIG_DFL, SIG_SETMASK, STDERR_FILENO, TIOCSCTTY, }; use seccompiler::{apply_filter, BpfProgram}; use std::cell::RefCell; @@ -204,7 +204,10 @@ fn sigwinch_listener_main(seccomp_filter: BpfProgram, tx: File, tty: File) -> ! /// /// Same as [`fork`]. unsafe fn clone_clear_sighand() -> io::Result { - let mut args = clone_args::default(); + let mut args = clone_args { + exit_signal: SIGCHLD as u64, + ..Default::default() + }; args.flags |= CLONE_CLEAR_SIGHAND; let r = clone3(&mut args, size_of::()); if r != -1 {