This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


On Tue, Oct 15, 2019 at 01:58:53PM +0200, Florian Weimer wrote:
> * 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.

Right. If you feel comfortable reviewing it an Ack from you on the
kernel patch would be good.

Thanks!
Christian


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]