Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757730AbdCUQaI (ORCPT ); Tue, 21 Mar 2017 12:30:08 -0400 Received: from mail-he1eur01on0092.outbound.protection.outlook.com ([104.47.0.92]:31115 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S933125AbdCUQ2d (ORCPT ); Tue, 21 Mar 2017 12:28:33 -0400 Authentication-Results: virtuozzo.com; dkim=none (message not signed) header.d=none;virtuozzo.com; dmarc=none action=none header.from=virtuozzo.com; Subject: Re: [PATCH] x86/mm: set x32 syscall bit in SET_PERSONALITY() To: References: <20170321155525.12220-1-dsafonov@virtuozzo.com> CC: <0x7f454c46@gmail.com>, Adam Borowski , , Cyrill Gorcunov , Borislav Petkov , "Kirill A. Shutemov" , , "H. Peter Anvin" , Andy Lutomirski , Ingo Molnar , Thomas Gleixner From: Dmitry Safonov Message-ID: <28376471-644c-a695-b249-9d0f66ee3a3f@virtuozzo.com> Date: Tue, 21 Mar 2017 19:24:46 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.1 MIME-Version: 1.0 In-Reply-To: <20170321155525.12220-1-dsafonov@virtuozzo.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: DB6P191CA0022.EURP191.PROD.OUTLOOK.COM (10.175.236.160) To AM5PR0801MB1729.eurprd08.prod.outlook.com (10.169.247.7) X-MS-Office365-Filtering-Correlation-Id: 79e7a767-77b8-48f1-971c-08d470774c79 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:AM5PR0801MB1729; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1729;3:GGsfPOO9nrHkXCNNPTgMvjt9XwqI6rDabZM6E64xs7zL+ztxVpVaebItOPZBZpclBRjppzaXbuowrQMBNZud6qCPgK2w45XNhNBQbj7y9oB5lMEs0AcNez/td0BDQ0zvswIXHP4qF9yOoSAbJwVkNo1birEeAgmZUfDOlAXo+jSdt8CPZ9ym1E/z9PKaJ4fm+BidW0U7QvQJM5MK5SCzptVHFNehzuGZV1pWXcySQDNgfmV5Z6WTjm3G+sW0TQFWQADFa3CmGZZqlTiYiqN8eg==;25:FPZWKF/+XixkndCJwFUwbMSunScOk7iZ+5PTlIQ+KLp/pQk6lqS4z0tSraTt1PDnIGHwWCsy8Apk0REeedh9xjWo2zQrvWeQPIT735C5KDL6xyQClM+gSkDsEGi0sn8n2idhBEyZCqr4w4tO3OUxHze7KNw99jfKMj6/bkvBUkBNg65BkLoPtsxR8EOqhat44uyenwbZvYvjGQNSA/zrQQWut2lU/ogZswq9vqTpQ3mOHoiDczMv8eCYI9owirfhoPkdIgkZLk7uEtPZS8ihsAyHTOCOmf2Ehg/xajxC3Dbob3HMvUD2v+CKtGUVubQyATnwcNjoAoyxgrhqb2NSUCZVcer2AMqiAGnkPdnV0vqff4AZnIU4fuR9d281ggh9v6gQpkdCsHr6XXvO1uVCJB9FAjFZfcGeOFY1pF7VCyqaB1E3QK7jGX3a4wR9jLeiGk3EruoXdNcoKTYi442Nxw== X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1729;31:EnG523KhRSo6hDAz8bTeYSLkBSNBWDiooW75VhhPPwUDdmCVKKjRoOxUGI8nvyby1tZi4zHlXkxAHLgBG11R6C6UR/DYTmIN5EgiyoapejVvO6UMMWZNY3h6h2o4cl720yoM0l+taQ7Q5o8LYatHIzPGcRP3mWn9N8HEqu3fbqF5oOqIdnZLkXkX7/davhkU5ZxvsXeustPtSXs+hrBjQhq53iygfdyuNO3fOEoU3qI=;20:Okq92+fhubU/7rSde0aBVVm4N8ZStKS8U74UYGScEdSpX/zzPl/FiAVVLhAe9QUXxMoi3JBXY40dvh2Gc4DsxPDaPGW74sZ7gKET3FYw/7CcEOD7FSNg8p2G/YB/xQcxr9M3SPPjICSA76okLGXTzrw+zG3cDKfjcohm1r3EDDf+aIPGg60Bu8g/54QbZqTWY2SrwyMXdoUy9jvHTcdfqkV3ItOrVU/bJAx/SN4SfpSGyvTs3aWQk2FZKI+MEDuHNC/CCNFxcMpHfoRixkHhyv12IcxLZZHOP3gyxkRm6GkiDLC5obsvWgtWDDZBdwQ0S/odPZuJUyPvO81CdqvyW13AFjtJWdcomBR4QwtyPbtnbmQ6hip+73iywiGuiH52LvmWgFA4M+krOAcGP4gNnI300sMHOmNC5z45G/LcmE8= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(228905959029699); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6041248)(20161123562025)(20161123564025)(20161123560025)(20161123558025)(20161123555025)(6072148);SRVR:AM5PR0801MB1729;BCL:0;PCL:0;RULEID:;SRVR:AM5PR0801MB1729; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1729;4:phetdPLtBnmeykkcqcentQWydEgaIMWHBOIhgmdxggorT3LOymeu8lP7sIGv31dbioJAA1KmDTBKFreyoiBirwsmmEPC3mwasbQVce+I4cbTYL9KTSGeVaem1G+XmgCIiuzLNA5KSnLhieOuntZaqf9+LWsF5d4ph6vuLbdrrqghz2wdm7j9F8swZ+46lqfxz/3EtQ26xMvyDuJEgMg2/lXAfk4zECuH/qeD3alSkh05BPvrh7DAeT6aJyXANtSADybv7+RO6DblM8CQp0QH9siB4S1yBvlkUzDoGjpL21EUT4aJ/ieBHS4elU+U8NVEc4WqCple82SgUTm8crtxwKvYDXlpr0kRNAh8RxWVDoBGUxVXWWsrY9Nd0E2euVLXPkmF07UJI45MwmdK8K6eXFKB8qcGlfQCKEKqYrQAobN6j/MCI3e11fMBc3C2Pw8GZoEJxfXUYv6aUqa1zYL+mLyrnZ3wj1F+HXY0dXUolGDmGdlHRGqaOF+crCpL7j7iYDgcATONd4BzCOL8l14eminNCJS/mB9Lv6MoU8FWPyT6jqNH66hiBAEeR/my1XGB1zpBsaNOxOD8enPbNvZpKkoSQDxNBlQ2VjinLG+n7q07juZmJsJ6FhX5sL6wmQ02MrCKVke3n0Uc6EIllQG+Wg== X-Forefront-PRVS: 02530BD3AA X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(39450400003)(24454002)(377454003)(38730400002)(76176999)(36756003)(54906002)(8676002)(64126003)(3846002)(31686004)(305945005)(86362001)(54356999)(2351001)(6486002)(7736002)(7416002)(31696002)(110136004)(77096006)(53546009)(83506001)(6246003)(4326008)(90366009)(65956001)(65806001)(47776003)(66066001)(6916009)(81166006)(50986999)(2950100002)(42186005)(6116002)(4001350100001)(53936002)(2906002)(5660300001)(229853002)(23746002)(230700001)(33646002)(6666003)(189998001)(50466002)(25786009);DIR:OUT;SFP:1102;SCL:1;SRVR:AM5PR0801MB1729;H:[172.16.25.13];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;AM5PR0801MB1729;23:SK1RdsSdhUA5i7VQt93t6jWqo7ZO4mfLROT?= =?Windows-1252?Q?vRqS4J94vjaZrlAeGdEG/nB4ICgVBgpLnQM3ffJ9i4bX90XcQ238i/xl?= =?Windows-1252?Q?bdofa6Tx16PBH2YGSdB9MgvyGd7FFHtX/WI2nYhqbBtptvx580bx48wQ?= =?Windows-1252?Q?FF56hbRZ9ImPg5r4tfV/L9yqCsAgJgXrjrTVIMH6nuSnaClYdMBW/wtC?= =?Windows-1252?Q?bZFzeoqH0PUJcwqf45g4xeZ+rP+uXeE683srII2RbwKPLi0JYdxEZn9I?= =?Windows-1252?Q?JPHydVsrP5qa+7Hiy2LpbLJba6B02gRptglZqLVqiIvtFP8Kv3XOijKv?= =?Windows-1252?Q?6qtj84vVne/RRmhfRVmH5HCFi6FefJAplseKF+gE2BStxrGurHPD1QW4?= =?Windows-1252?Q?qh4sgkAMGV3xf7EiogalyRpS7SCbulSas+/t/WoYoHitZ/sHnE2CDmuf?= =?Windows-1252?Q?4GvZ/jtcPG1HpvFCcst/az7DAZ6cP/Zypjvhe3qeeKiVh7ru6uU2x+kv?= =?Windows-1252?Q?L093WWyDbudryGoElev3Ypqha6FKppuOhmXeVZmGgEnI+wmi8KyJldIL?= =?Windows-1252?Q?PTYzu29aRCrlKr15Quy36lWu49y/egoTED46f2hiJ+rRiLY+YOh3zVGf?= =?Windows-1252?Q?jIw0NxEMX8zILuOvabaP428vuTsFLpqzUDQwozD9jAq6kRkZskg3sMq/?= =?Windows-1252?Q?WhhYTOZ0J/x7BbQ4zBLwiAm9DvTo2CEYa/LCeg71iAStqmHLRnSlTBnU?= =?Windows-1252?Q?qkzIkeIAqpCg7fEJFHiRZuY8oE4m0wqESWyBsolfdYuVq3fZoqWo3c9N?= =?Windows-1252?Q?iMBn9uKVjmrwrxO7FyBCQK16cp+1uPSO78+7Odb0ttGNJVJuAOtwChoN?= =?Windows-1252?Q?Nfz52u+D9qgike9vbp+FB8aGwMYXNB+TvKtDNg78OCx2YPHIMCqmXwgs?= =?Windows-1252?Q?Zdl4kqLsNIYOflqrJtcXw45m1XAXG79NJjIABBTjWRII7RXaO60csLNK?= =?Windows-1252?Q?C9KF8+9zT1yzHNyUOVJmbUhOOlnNXuGw7T4jY4scsaftsYrhUyZDEgQM?= =?Windows-1252?Q?YLO4dIu94iAnXwHdBXtv8cD3xt7DJLzZcl77RCXdA+D/Y5NS7qLYlScU?= =?Windows-1252?Q?BUZU/FFuUkHKCi5vVrU06QqNaQFOb/W1Qwac2nDNdvPL5b3xi9nQue+C?= =?Windows-1252?Q?KedypBN2T2eJDIwBLKGdJeDsQGNQ9KYNTWSPhMXcnDaov6qLlfkvYNBL?= =?Windows-1252?Q?Tn1kRjDgQ9/ggUM3gu3o62yKOdY2T0pXiQaRkhAUF4Eiwc8rBWQF8IE9?= =?Windows-1252?Q?CWTHWvc3Fq/aeVVh6Rk4LNRfxWw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1729;6:PVS/OY5MrZWTi2bjOjjtepQaudyJ1puTXO/EZ8Upzr2sWI4cUbQXDafg9Gzf1+49iCSNKeM7xTprHWjQXPfma/PJ90EIFwf8eGjMVTbtoV3RC0iw0Wdpk0qTtNg7NfX5M8eJs9RPYDJDKaYcOPuv/x/bKqplnoEiN+wje2UVeXBH19QXELUWEkSi4JP0cxncD9tOOp7zVBIXxi9A7XX3Zglrx2zYMFiYJzzysV3YQI6qFp3EoI/W860nG7RVgrP5rlGAlFwFrmp0gcAdW6C//ICJqKv2TKmY3mHdJgdwoZev0K+sf7JOr4apAl6dcji2uMmOV8iqWp2bHPTaNTUr9ftBW6ZU4zKmSgBKSFOKtk1CWc6tPdEDkn3bMsRvO7KPhjITnTdk7QhKf+gKoc/yZw==;5:HFRh3DWQHSzMPHKebu7aEBKSu6/B4UjcTZJC6RINntj2u5Sm0AW3fyddmEd9YyQiP9Sh6W6zv8GWaxHM1D7XA35dViqB6pHnOWHuMYT00XOpCRF47NK9WZLGMZ53JV5oYtL1pgnoedTSJrQlyooEDA==;24:NH+hN07RVyT8UnlB/P5aBEXQW/PTOU2+tLvNzn4in0bM9hUl8sP9FmekF07YpzLfSMCD6Vj6MFX6V/AkhVp1x4wqR4zsI6X12f+GQv5KQvI= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1729;7:czy0ROVsMblHYj6ToT8tYtbUcqcxg9fC05/DibTM0j9UUI6AB7pUazjDmZ6J2GyCPjL3Pkd9paFuR3lBPuxDWoXiJUBMLK6EkSBDymRXuyP74ArliLnooS8kMyTGs4fQg+7kfCMJIsg7gq/RGjKsB8UbJ2uF68TsCtBcOHM5m25Gcqv4UBofdQ3nhSLAFvz2/kvgBe/SLsT5L2XrZKo320MOu1lO4eXEWTXmZAPkRvJ36tA22POQdgAvI0WyUB2w4d7YG0cdrRhh5zHyIP/63Z6EPOQbn7rWxnGE77TRIueAq53aVPnVgsDAtvaLfU7bKtPkCyFviK05R+xI7KnKoA==;20:BjCBUGttP8GRAVXp+UrjLFoFks28ioSfINBUt5MD3JFsNwesGKfPaZJUcp2wVZywjxkd5F8GkdnqCeG3Yc6gZHQY/ZnNn5em938i4bvvtl0ZLVcDYlnr3OsvMreNwU5jtjxXw76hhm347efrM0hI/EJmlBfk7VcuP2xL7vNKhWU= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Mar 2017 16:28:23.9447 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB1729 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2702 Lines: 66 On 03/21/2017 06:55 PM, Dmitry Safonov wrote: > After my changes to mmap(), its code now relies on the bitness of > performing syscall. According to that, it chooses the base of allocation: > mmap_base for 64-bit mmap() and mmap_compat_base for 32-bit syscall. > It was done by: > commit 1b028f784e8c ("x86/mm: Introduce mmap_compat_base() for > 32-bit mmap()"). > > The code afterwards relies on in_compat_syscall() returning true for > 32-bit syscalls. It's usually so while we're in context of application > that does 32-bit syscalls. But during exec() it is not valid for x32 ELF. > The reason is that the application hasn't yet done any syscall, so x32 > bit has not being set. > For i386 ELFs it works as SET_PERSONALITY() sets TS_COMPAT flag. > > I suggest to set x32 bit before first return to userspace, during > setting personality at exec(). This way we can rely on > in_compat_syscall() during exec(). > > Fixes: commit 1b028f784e8c ("x86/mm: Introduce mmap_compat_base() for > 32-bit mmap()") > Cc: 0x7f454c46@gmail.com > Cc: linux-mm@kvack.org > Cc: Cyrill Gorcunov > Cc: Borislav Petkov > Cc: "Kirill A. Shutemov" > Cc: x86@kernel.org > Cc: H. Peter Anvin > Cc: Andy Lutomirski > Cc: Ingo Molnar > Cc: Thomas Gleixner > Reported-by: Adam Borowski > Signed-off-by: Dmitry Safonov Drop this one - I'll send updated v2 shortly slightly improving: - specifying mmap() allocation path which failed during exec() - fix comment style (looks like my editor didn't insert asterisks as they were missing before and check_patch didn't blame me) > --- > arch/x86/kernel/process_64.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c > index d6b784a5520d..88d99d35a699 100644 > --- a/arch/x86/kernel/process_64.c > +++ b/arch/x86/kernel/process_64.c > @@ -520,7 +520,12 @@ void set_personality_ia32(bool x32) > 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 */ > + 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; > } else { > set_thread_flag(TIF_IA32); > -- Dmitry