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

Alexander Kartashov alekskartashov at parallels.com
Thu Apr 25 02:30:53 EDT 2013


Thank you, Andrew. However, this hunk doesn't apply:

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