This hides the inconsistent TCB state (missing robust mutex list) from
signal handlers.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
pid_t
_Fork (void)
{
+ /* Block all signals to avoid revealing the inconsistent TCB state
+ to a signal handler after fork. */
+ internal_sigset_t original_sigmask;
+ internal_signal_block_all (&original_sigmask);
+
pid_t pid = arch_fork (&THREAD_SELF->tid);
if (pid == 0)
{
INTERNAL_SYSCALL_CALL (set_robust_list, &self->robust_head,
sizeof (struct robust_list_head));
}
+
+ internal_signal_restore_set (&original_sigmask);
return pid;
}
libc_hidden_def (_Fork)