Re: Fix signalfd interaction with thread-private signals

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 06/20, Linus Torvalds wrote:
> 
> On Wed, 20 Jun 2007, Oleg Nesterov wrote:
> > 
> > Also, suppose that some thread does
> > 
> > 	for (;;)
> > 		signal(SIGSEGV, SIG_IGN);
> > 
> > Now we have the same situation. do_sigaction() can steal SIGSEGV from
> > another thread.
> 
> Actually, that shouldn't be possible.
> 
> See "force_sig_info()". It does not allow blocking or ignoring forced 
> signals. We will reset such a signal handler to SIG_DFL, and unlock it.
> 
> So if you get a SIGSEGV while SIGSEGV's are blocked or ignored, the kernel 
> *will* kill you. No questions asked.

Yes, and no.

Yes, force_sig() unblocks and un-ignores the signal. However, unlike group-wide
signals, thread-specific signals do not convert themselves to SIGKILL on delivery.
The target thread should dequeue SIGSEGV and then it calls do_group_exit().
Before it does so, another thread doing signal(SIGSEGV, SIG_IGN) can steal
the signal.

Of course, this is unlikely, and the target thread will take page fault again.
The same for signalfd.

Oleg.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux