[CRIU] [PATCH 1/4] signal: allow to send any siginfo to itself

Andrew Vagin avagin at parallels.com
Tue Dec 4 08:17:42 EST 2012


On Tue, Dec 04, 2012 at 03:03:19PM +0400, Pavel Emelyanov wrote:
> On 12/04/2012 02:05 PM, Andrey Vagin wrote:
> > A kernel prevents of sending sifinfo with positive si_code, because
> > these codes is reserved for kernel. I think we can allow to send any
> > siginfo to itself. This operation should not be dangerous.
> > 
> > This functionality is required for restoring signals.
> 
> How do I chose whether to send signal to self queue or to shared one

rt_sigqueueinfo sends to shared queue and rt_tgsigqueueinfo sends to
private queue.

?
> 
> > Signed-off-by: Andrey Vagin <avagin at openvz.org>
> > ---
> >  kernel/signal.c | 6 ++++--
> >  1 file changed, 4 insertions(+), 2 deletions(-)
> > 
> > diff --git a/kernel/signal.c b/kernel/signal.c
> > index 0af8868..1daa015 100644
> > --- a/kernel/signal.c
> > +++ b/kernel/signal.c
> > @@ -2952,7 +2952,8 @@ SYSCALL_DEFINE3(rt_sigqueueinfo, pid_t, pid, int, sig,
> >  	/* Not even root can pretend to send signals from the kernel.
> >  	 * Nor can they impersonate a kill()/tgkill(), which adds source info.
> >  	 */
> > -	if (info.si_code >= 0 || info.si_code == SI_TKILL) {
> > +	if (((info.si_code >= 0 || info.si_code == SI_TKILL)) &&
> > +	    (task_pid_vnr(current) != pid)) {
> >  		/* We used to allow any < 0 si_code */
> >  		WARN_ON_ONCE(info.si_code < 0);
> >  		return -EPERM;
> > @@ -2972,7 +2973,8 @@ long do_rt_tgsigqueueinfo(pid_t tgid, pid_t pid, int sig, siginfo_t *info)
> >  	/* Not even root can pretend to send signals from the kernel.
> >  	 * Nor can they impersonate a kill()/tgkill(), which adds source info.
> >  	 */
> > -	if (info->si_code >= 0 || info->si_code == SI_TKILL) {
> > +	if ((info->si_code >= 0 || info->si_code == SI_TKILL) &&
> > +	    (task_pid_vnr(current) != pid)) {
> >  		/* We used to allow any < 0 si_code */
> >  		WARN_ON_ONCE(info->si_code < 0);
> >  		return -EPERM;
> > 
> 
> 


More information about the CRIU mailing list