From b300078d97a6892cb2fa1c63a46333754db60555 Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Sat, 28 Sep 2024 09:44:25 +0200 Subject: [PATCH] Linux: Block signals around _Fork (bug 32215) This hides the inconsistent TCB state (missing robust mutex list) from signal handlers. Reviewed-by: Adhemerval Zanella --- sysdeps/nptl/_Fork.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sysdeps/nptl/_Fork.c b/sysdeps/nptl/_Fork.c index ef199ddbc3..fd2cfc7840 100644 --- a/sysdeps/nptl/_Fork.c +++ b/sysdeps/nptl/_Fork.c @@ -22,6 +22,11 @@ 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) { @@ -44,6 +49,8 @@ _Fork (void) 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)