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

Dmitry Safonov dsafonov at virtuozzo.com
Wed Nov 23 10:36:11 PST 2016


On 10/27/2016 06:00 PM, Andrey Ryabinin wrote:
> 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>

ping? Can we have it?
It's quite rare to use x32 (not ia32 compat), quite sure that we don't
even have x32 libc and other userspace in repos, but still...

>>  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())
>>


-- 
              Dmitry


More information about the Devel mailing list