[Devel] [PATCH RH7] ms/x86/signal: Remove bogus user_64bit_mode() check from sigaction_compat_abi()

Andrey Ryabinin aryabinin at virtuozzo.com
Thu Oct 27 08:00:16 PDT 2016


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 <mpatocka at redhat.com>
> Tested-by: Adam Borowski <kilobyte at angband.pl>
> Signed-off-by: Dmitry Safonov <0x7f454c46 at gmail.com>
> Cc: Dmitry Safonov <dsafonov at virtuozzo.com>
> Cc: Oleg Nesterov <oleg at redhat.com>
> Cc: linux-mm at kvack.org
> Cc: Cyrill Gorcunov <gorcunov at openvz.org>
> Cc: Pavel Emelyanov <xemul at virtuozzo.com>
> Link: http://lkml.kernel.org/r/CAJwJo6Z8ZWPqNfT6t-i8GW1MKxQrKDUagQqnZ%2B0%2B697%3DMyVeGg@mail.gmail.com
> Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
> Signed-off-by: Ingo Molnar <mingo at kernel.org>
> Signed-off-by: Dmitry Safonov <dsafonov at virtuozzo.com>
> 
> [backported from ms commit ed1e7db33c33 ("x86/signal: Remove bogus
> user_64bit_mode() check from sigaction_compat_abi()")]
> Signed-off-by: Dmitry Safonov <dsafonov at virtuozzo.com>
> ---

Acked-by: Andrey Ryabinin <aryabinin at 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())
> 


More information about the Devel mailing list