[CRIU] [PATCH 1/2] restore: fix restoring signal blocking mask on arm

Andrew Vagin avagin at parallels.com
Thu Apr 25 03:36:24 EDT 2013


On Thu, Apr 25, 2013 at 10:30:53AM +0400, Alexander Kartashov wrote:
> Thank you, Andrew. However, this hunk doesn't apply:

Sorry, it's my mistake. Could you try out the attached patch.

> 
> On 04/24/2013 08:09 PM, Andrey Vagin wrote:
> >diff --git a/pie/restorer.c b/pie/restorer.c
> >index 2a30b29..8ed94cc 100644
> >--- a/pie/restorer.c
> >+++ b/pie/restorer.c
> >@@ -219,7 +219,7 @@ static int restore_thread_common(struct rt_sigframe *sigframe,
> >  	}
> >  	if (args->has_blk_sigset)
> >-		RT_SIGFRAME_UC(sigframe).uc_sigmask.sig = args->blk_sigset;
> >+		RT_SIGFRAME_UC(sigframe).uc_sigmask = args->blk_sigset;
> >  	restore_sched_info(&args->sp);
> >  	if (restore_fpu(sigframe, args))
> 
> since the removed line is
> 
> RT_SIGFRAME_UC(sigframe).uc_sigmask.sig[0] = args->blk_sigset;
> 
> Moreover, the replaced line can't be compiled since it's impossible to
> assign an u64 to a struct. So, I think, this hunk should look like this:
> 
> @@ -219,7 +220,7 @@ static int restore_thread_common(struct
> rt_sigframe *sigframe,
>         }
> 
>         if (args->has_blk_sigset)
> -               RT_SIGFRAME_UC(sigframe).uc_sigmask.sig[0] =
> args->blk_sigset;
> + builtin_memcpy(&RT_SIGFRAME_UC(sigframe).uc_sigmask,
> &args->blk_sigset, sizeof(k_rtsigset_t));
> 
>         restore_sched_info(&args->sp);
>         if (restore_fpu(sigframe, args))
> 
> Alternatively, we may force k_rtsigset_t be u64 on x86 and ARM.
> 
> -- 
> Sincerely yours,
> Alexander Kartashov
> 
> Intern
> Core team
> 
> www.parallels.com
> 
> Skype: aleksandr.kartashov
> Email: alekskartashov at parallels.com
> 


More information about the CRIU mailing list