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: Florian Weimer <fweimer at redhat dot com>
- To: Christian Brauner <christian dot brauner at ubuntu dot com>
- Cc: libc-alpha at sourceware dot org
- Date: Tue, 15 Oct 2019 13:58:53 +0200
- Subject: Re: [PATCH] nptl: Start new threads with all signals blocked [BZ #25098]
- References: <87k197ik0o.fsf@oldenburg2.str.redhat.com> <20191014133231.sa4zalwbsiybpyvj@wittgenstein>
* Christian Brauner:
> 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? :)
Maybe. I think the handler reset is more important because as
Adhemerval explained, it saves many more system calls.
Thanks,
Florian