On 10/26/2016 07:15 PM, Dmitry Safonov wrote:
> The recent introduction of SA_X32/IA32 sa_flags added a check for
> user_64bit_mode() into sigaction_compat_abi(). user_64bit_mode() is true
> for native 64-bit processes and x32 processes.
> 
> Due to that the function returns w/o setting the SA_X32_ABI flag for X32
> processes. In consequence the kernel attempts to deliver the signal to the
> X32 process in native 64-bit mode causing the process to segfault.
> 
> Remove the check, so the actual check for X32 mode which sets the ABI flag
> can be reached. There is no side effect for native 64-bit mode.
> 
> [ tglx: Rewrote changelog ]
> 
> Fixes: 6846351052e6 ("x86/signal: Add SA_{X32,IA32}_ABI sa_flags")
> Reported-by: Mikulas Patocka <mpato...@redhat.com>
> Tested-by: Adam Borowski <kilob...@angband.pl>
> Signed-off-by: Dmitry Safonov <0x7f454...@gmail.com>
> Cc: Dmitry Safonov <dsafo...@virtuozzo.com>
> Cc: Oleg Nesterov <o...@redhat.com>
> Cc: linux...@kvack.org
> Cc: Cyrill Gorcunov <gorcu...@openvz.org>
> Cc: Pavel Emelyanov <xe...@virtuozzo.com>
> Link: 
> http://lkml.kernel.org/r/cajwjo6z8zwpqnft6t-i8gw1mkxqrkduagqqnz%2b0%2b697%3dmyv...@mail.gmail.com
> Signed-off-by: Thomas Gleixner <t...@linutronix.de>
> Signed-off-by: Ingo Molnar <mi...@kernel.org>
> Signed-off-by: Dmitry Safonov <dsafo...@virtuozzo.com>
> 
> [backported from ms commit ed1e7db33c33 ("x86/signal: Remove bogus
> user_64bit_mode() check from sigaction_compat_abi()")]
> Signed-off-by: Dmitry Safonov <dsafo...@virtuozzo.com>
> ---

Acked-by: Andrey Ryabinin <aryabi...@virtuozzo.com>

>  arch/x86/ia32/ia32_signal.c | 3 ---
>  1 file changed, 3 deletions(-)
> 
> diff --git a/arch/x86/ia32/ia32_signal.c b/arch/x86/ia32/ia32_signal.c
> index 9c6c4de8da46..cbd5c5ad5edf 100644
> --- a/arch/x86/ia32/ia32_signal.c
> +++ b/arch/x86/ia32/ia32_signal.c
> @@ -47,9 +47,6 @@ void sigaction_compat_abi(struct k_sigaction *act, struct 
> k_sigaction *oact)
>       /* Don't let flags to be set from userspace */
>       act->sa.sa_flags &= ~(SA_IA32_ABI | SA_X32_ABI);
>  
> -     if (user_64bit_mode(current_pt_regs()))
> -             return;
> -
>       if (is_ia32_task())
>               act->sa.sa_flags |= SA_IA32_ABI;
>       if (is_x32_task())
> 
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to