[PATCH] nptl: Start new threads with all signals blocked [BZ #25098]

Christian Brauner christian.brauner@ubuntu.com
Mon Oct 14 13:32:00 GMT 2019


On Mon, Oct 14, 2019 at 02:33:43PM +0200, Florian Weimer wrote:
> 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

He, do I see a growing wishlist? :)

Christian



More information about the Libc-alpha mailing list