This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] nptl: Start new threads with all signals blocked [BZ #25098]
- From: Christian Brauner <christian dot brauner at ubuntu dot com>
- To: Florian Weimer <fweimer at redhat dot com>
- Cc: libc-alpha at sourceware dot org
- Date: Mon, 14 Oct 2019 15:32:31 +0200
- Subject: Re: [PATCH] nptl: Start new threads with all signals blocked [BZ #25098]
- References: <87k197ik0o.fsf@oldenburg2.str.redhat.com>
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