Messages in this thread | | | Date | Wed, 10 Mar 2010 22:19:23 +0100 | From | Oleg Nesterov <> | Subject | Re: [PATCH] wait_for_helper: SIGCHLD from user-space can lead to use-after-free |
| |
On 03/10, Roland McGrath wrote: > > SIGCHLD being blocked doesn't affect reaping, so SIG_IGN or sa_flags & > SA_NOCLDWAIT is the only thing that would do this. How does that come > about here in this kthread? Is it inherited from the instigating user > process? If so, then SA_NOCLDWAIT is as much a problem as SIG_IGN. > Or I guess maybe it's from ignore_signals() in kthreadd()? > In that case SIG_IGN is indeed all that matters. (I don't really > know all the kthread/kmod/userhelper code organization.)
Yes. kthreads run with all signal ignored, this is inherited from kthreadd() which does ignore_signal().
> Perhaps it would be cleaner to do: > > flush_signal_handlers(current, 1); > > in wait_for_helper
I don't think this can work. SIG_DFL for SIGCHLD is OK because it is sig_kernel_ignore(). But, say, SIGHUP and other signals still should be ignored, otherwise we have the same problems with the unwanted signal_pending() this patch tries to avoid.
But even if we could do this,
> That should make it redundant in ____call_usermodehelper, > so it could be removed from there.
Please note that __call_usermodehelper() forks ____call_usermodehelper() too.
Oleg.
| |