Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933859AbdCUSvb convert rfc822-to-8bit (ORCPT ); Tue, 21 Mar 2017 14:51:31 -0400 Received: from terminus.zytor.com ([65.50.211.136]:37540 "EHLO mail.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933293AbdCUSus (ORCPT ); Tue, 21 Mar 2017 14:50:48 -0400 Date: Tue, 21 Mar 2017 11:49:37 -0700 User-Agent: K-9 Mail for Android In-Reply-To: References: <20170321163712.20334-1-dsafonov@virtuozzo.com> <20170321171723.GB21564@uranus.lan> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8BIT Subject: Re: [PATCHv2] x86/mm: set x32 syscall bit in SET_PERSONALITY() To: Andy Lutomirski , Cyrill Gorcunov CC: Dmitry Safonov , "linux-kernel@vger.kernel.org" , Dmitry Safonov <0x7f454c46@gmail.com>, Adam Borowski , "linux-mm@kvack.org" , Andrei Vagin , Borislav Petkov , "Kirill A. Shutemov" , X86 ML , Andy Lutomirski , Ingo Molnar , Thomas Gleixner From: hpa@zytor.com Message-ID: <13EAF4BE-144F-47D6-8A38-3B6D97ACFF8A@zytor.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2029 Lines: 41 On March 21, 2017 10:45:57 AM PDT, Andy Lutomirski wrote: >On Tue, Mar 21, 2017 at 10:17 AM, Cyrill Gorcunov >wrote: >> On Tue, Mar 21, 2017 at 07:37:12PM +0300, Dmitry Safonov wrote: >> ... >>> diff --git a/arch/x86/kernel/process_64.c >b/arch/x86/kernel/process_64.c >>> index d6b784a5520d..d3d4d9abcaf8 100644 >>> --- a/arch/x86/kernel/process_64.c >>> +++ b/arch/x86/kernel/process_64.c >>> @@ -519,8 +519,14 @@ void set_personality_ia32(bool x32) >>> if (current->mm) >>> current->mm->context.ia32_compat = TIF_X32; >>> current->personality &= ~READ_IMPLIES_EXEC; >>> - /* in_compat_syscall() uses the presence of the x32 >>> - syscall bit flag to determine compat status */ >>> + /* >>> + * in_compat_syscall() uses the presence of the x32 >>> + * syscall bit flag to determine compat status. >>> + * On the bitness of syscall relies x86 mmap() code, >>> + * so set x32 syscall bit right here to make >>> + * in_compat_syscall() work during exec(). >>> + */ >>> + task_pt_regs(current)->orig_ax |= __X32_SYSCALL_BIT; >>> current->thread.status &= ~TS_COMPAT; >> >> Hi! I must admit I didn't follow close the overall series (so can't >> comment much here :) but I have a slightly unrelated question -- is >> there a way to figure out if task is running in x32 mode say with >> some ptrace or procfs sign? > >You should be able to figure out of a *syscall* is x32 by simply >looking at bit 30 in the syscall number. (This is unlike i386, which >is currently not reflected in ptrace.) > >Do we actually have an x32 per-task mode at all? If so, maybe we can >just remove it on top of Dmitry's series. We do, for things like signal delivery mostly. We have tried relying on it as little as possible, intentionally. -- Sent from my Android device with K-9 Mail. Please excuse my brevity.