In https://bugs.gentoo.org/673560 among other problems gcc was having mysterious environment memory corruption. valgrind claims SIGCHLD has uninitialized sa_restorer and sa_mask in sigaction: ==10333== Syscall param rt_sigaction(act->sa_mask) points to uninitialised byte(s) ==10333== at 0x5291978: __libc_sigaction (sigaction.c:58) ==10333== by 0x4E3E66D: trace_main (trace.c:498) ==10333== by 0x4E3F6EC: sb_check_exec (__wrapper_exec.c:208) ==10333== by 0x4E41A99: execvp@@GLIBC_2.2.5 (__wrapper_exec.c:273) ==10333== by 0x11D28B: exec_command (in /usr/bin/gmake) ==10333== by 0x11D53E: child_execute_job (in /usr/bin/gmake) ==10333== by 0x11AA48: func_shell_base (in /usr/bin/gmake) ==10333== by 0x11AE53: handle_function (in /usr/bin/gmake) ==10333== by 0x115E95: variable_expand_string (in /usr/bin/gmake) ==10333== by 0x115A0B: allocated_variable_expand_for_file (in /usr/bin/gmake) ==10333== by 0x12AFB0: do_variable_definition (in /usr/bin/gmake) ==10333== by 0x12B745: try_variable_definition (in /usr/bin/gmake) ==10333== Address 0x1ffeffd398 is on thread 1's stack --- a/libsandbox/trace.c +++ b/libsandbox/trace.c @@ -495,6 +495,7 @@ void trace_main(const char *filename, char *const argv[]) sa.sa_flags = SA_RESTART | SA_SIGINFO; sa.sa_sigaction = trace_child_signal; + memset(&sa, 0, sizeof(sa)); sigaction(SIGCHLD, &sa, &old_sa); sb_debug_dyn("trace_main: tracing: %s\n", filename);