[RFC PATCH glibc 3/8] nptl: Start new threads with all signals blocked [BZ #25098]
Christian Brauner
christian.brauner@ubuntu.com
Mon Mar 23 15:31:56 GMT 2020
On Mon, Mar 23, 2020 at 09:16:02AM -0400, Mathieu Desnoyers via Libc-alpha wrote:
> From: Florian Weimer <fweimer@redhat.com>
>
> New threads inherit the signal mask from the current thread. This
> means that signal handlers can run on the newly created thread
> immediately after the kernel has created the userspace thread, even
> before glibc has initialized the TCB. Consequently, new threads can
> observe uninitialized ctype data, among other things.
>
> To address this, block all signals before starting the thread, and
> pass the original signal mask to the start routine wrapper. On the
> new thread, first perform all thread initialization, and then unblock
> signals.
>
> The cost of doing this is two rt_sigprocmask system calls on the old
> thread, and one rt_sigprocmask system call on the new thread. (If
> there was a way to clone a new thread with a signals disabled, this
This could be a new clone3() flag. If someone wants to send a patch I'd
take it.
Christian
More information about the Libc-alpha
mailing list