Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754959AbcDYRPi (ORCPT ); Mon, 25 Apr 2016 13:15:38 -0400 Received: from mail-db3on0136.outbound.protection.outlook.com ([157.55.234.136]:42016 "EHLO emea01-db3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754456AbcDYRPg (ORCPT ); Mon, 25 Apr 2016 13:15:36 -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: [RFC 3/3] x86/ptrace: down with test_thread_flag(TIF_IA32) To: Andy Lutomirski , Oleg Nesterov References: <1461600763-3534-1-git-send-email-dsafonov@virtuozzo.com> <1461600763-3534-3-git-send-email-dsafonov@virtuozzo.com> CC: "linux-kernel@vger.kernel.org" , Dmitry Safonov <0x7f454c46@gmail.com>, Andy Lutomirski , Ingo Molnar , Thomas Gleixner , "H. Peter Anvin" , X86 ML From: Dmitry Safonov Message-ID: <571E5076.2040802@virtuozzo.com> Date: Mon, 25 Apr 2016 20:14:30 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: VI1PR07CA0100.eurprd07.prod.outlook.com (10.165.229.154) To HE1PR0801MB1306.eurprd08.prod.outlook.com (10.167.247.148) X-MS-Office365-Filtering-Correlation-Id: ec28969a-16e7-40e5-7253-08d36d2d34dd X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1306;2:Bh4riKwSkkI5z2lnhnarlhDHvFfT6gWjqIkaOkhgssSNAR47IgPNaTey9jcoL46vVGz7HPm6yYX0U+8mxnx7ORD3CNG6f4Uvgp4I3U7ywhzv2wz1aSa6Rv80AQklmlMuUPvVXvFChYR4CnDHZ79i9lHNwVCvfD4IRJB1mA5gw2F2sYKwyS0pXLAqfqUl8jsL;3:H8Fb7C/d9GTmZTjAX1XCygMKrTwAnfCOz1hhqaz2Aedu50Myk1a9PPr7aFdkg7/oUVJVDlAHBe7FhHywrMLXgVMHWFv4BDIYN61Q69G9sxIv7bvt+g+8c75vgxRXb+R6;25:G8BHnzzEZquH93AiuZ5TKdxqGr3tK0MTsqunCnx6XWov+jRKGJxecS9DVdtFGRVysZqSSc0Uabfk1sifJetIA2pGbj8yDQp4V8kSadRBlzUNwnjjstQlyHlI7LRoK+ebBFh89KNeR9VIxmhKWmCRT9uTN1tjryxwSW/bgd/xwUA2u/yRzL2sWx0i2FBBeCqas7EEDo49x9zkIC5/t1km4Lz5ute5MjWPILPoSxOPIZWbB/S1UdfFrzQ6kgee7PnfrUqRJmwTHI75uexZcinsAESA5LD8AbxIM+8G1/sY9p1HbDY9sV9G75eA3xJWb2q/2W2PnIvOEkJac4F1tN8RnKEml1dEhxGPsxKr/PfMV1cS1o8+5Y5jsa1D73YmwUuE905jK28altuHtCadMd+alHW2fWw1+O8VsioGMBMC4q8oV6xGZtjfTzzaQJ4LEgOHygOcL6DeN3UECLOaJcoDKD9ky650H4wbBBbA8vPVqAG3tlQ1xiSar3SWlUQwTOigorXAVyZXhrRBB826DtrLRc/JoMoNPujrWzQGjaXu6lFrX7l0Zy+IypLvgyPQLHwZTx5SvfSxHvkOxPpPTRGQ60tc0U/1Dcb7vS3CDJAjk5noJsFrVEW/VLiYak7WrHWt X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0801MB1306; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(9101521067)(6040130)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6041072)(6043046);SRVR:HE1PR0801MB1306;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0801MB1306; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1306;4:JwgPhFM6nNsTvelwnwAWSQ0pB4RZqq877frTUsPaPKSGTN1QRZ3KfWnctiAxnuYnbKobUhcuimqjoxoCauHlkATF6/rGK7KQ16hTl1rgux/CAwNlu40caT9KydjKxXMKOYymoRCN9+kwPaF6UdEnB2497/Elw4hFspNMGET0j9ytz9xlA2+jO3rWdhgQh9orhG00EraHo2CsB2yY3GqHYS22KOGwCpLIx8ant/0rfe9ueQnI/XOlIl+SuElHCazwjHGsXCfduVH2G/+KlJbnh/F5Vx+qOTmSjhlUg6iFVfLXH5ClQMWHp/XD5wAaS3X8n3H5/D0FSnysBzn7z0I7DIbdJTGL2NpK6o448HwIAev8ITkPAJuePePfS2qTMSA3+m0NeyKmb8/YdwqM2d9lBO5Z7Y0ZBU9GZ34qVMqUeSK5AhuRgQo6YKBPoS+Gah6xdr1hcq2y/MxOnjAX0GaZkQ== X-Forefront-PRVS: 0923977CCA X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(24454002)(377454003)(5008740100001)(47776003)(50986999)(92566002)(76176999)(54356999)(42186005)(81166005)(65816999)(87266999)(83506001)(189998001)(3846002)(64126003)(1096002)(2950100001)(6116002)(586003)(36756003)(5001770100001)(33656002)(5004730100002)(4326007)(77096005)(2906002)(230700001)(86362001)(65956001)(65806001)(19580395003)(80316001)(23676002)(66066001)(19580405001);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0801MB1306;H:[10.30.26.154];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtIRTFQUjA4MDFNQjEzMDY7MjM6S0ZlaE9HTGFBcExtMTkzeDJIMVowbEI2?= =?utf-8?B?c2pQVlliZGRndnIxQmlWcnRWaTdxa0ZjRmFEUmNrVGhUbHliQUovbllwK1lC?= =?utf-8?B?dE5RdlFjQUlVRlJTUEN4S1BHdmhtOWI2QWE2cVZlVXpsb3lhc0dBSzE5T1Vu?= =?utf-8?B?Q3hWVnFXWmQ5K0cwWkhwSXR4Vkk2dW4wbE8wMWJSZFE1c0h4RHFtZzlwS3BJ?= =?utf-8?B?RmNJSjZNdlY3Rk1aRXNqMm1jM084QU5uaU5zazVRVWN0VXdPVGliL3NDdzI1?= =?utf-8?B?VVFQcktnRXRiZy9KRnhFQXcxcHZlbnlDV01EVmxqZEkxNytEbUV2ZUp4cFB0?= =?utf-8?B?RitaSnJnZUtPcXdFcFR6MVJFeG5hQ1RoK2VJTFhZbGhGWmw2a1hWQUd0ZGxI?= =?utf-8?B?OGRzMCtuNWsxL01CdTlNbDBMNDhUQjFoY3VuUkJVZFQ0cyt0YWZRU0pINDdI?= =?utf-8?B?ZE5wOEZmdG5uNFRTK3ZEMkFCYW5xTmNwM1k1cXpRS1NqbVNHMGJFNEJTWDRQ?= =?utf-8?B?alJWa1NYcEUzcTdmNFdOeU91ODJwTEh1bXRyQm4wSnZIWlNaSWU0cmw1THlx?= =?utf-8?B?bWpXOEs4RWNpNnFuNlFXQXNDVHRWdkFTSlNyWnBNK1JhNzhnTnpVSFBuM3Ji?= =?utf-8?B?eHhYSEU3aTNrdy90Nm1vUk5IczIrRlpuQlNTSFFHTjZHTGIxam0yZDJPeE9N?= =?utf-8?B?MXpMOFB2NWFFTkJFL01UcnQ5NFZyeU9MK2ExRnBHdWQ2SU9wMnorS3VQZnZk?= =?utf-8?B?djR5eTVYWDgzcWtHN1VkSnRaZk5Ta0kzOGZYV240OFh3STNEUlJRYjAwUlNz?= =?utf-8?B?UXZTSHVqQkMyb1BUWnZHc1phQkF6MFlYMkdmTDN4LzNwRGowOE9oek9sZWxt?= =?utf-8?B?UkVsdmc4NFJqM3FXVm9TVFhEbWxGVk5ac2MvWkk1RUtnQVV6NEZlQ0tiWnJt?= =?utf-8?B?SGViTHJROTFINTlGVWU1N2VLeEJHS2RpUE1jb0JCSUg4T3dVTDVvTWMzd2pp?= =?utf-8?B?NmEwc2hPMDZJMjd5RVlzZWZiQ3B2OElDdnN0TW9aZjYrQnIzNG5WRndHSFVo?= =?utf-8?B?ZGloMzVtdFRHUmNEK2xXVGtodVFiSUZCZHF4eUVyeGRYNUl1WmVUUUE4Umdv?= =?utf-8?B?VkJtRGhpdUdSMkRsQWovM3pxWXFEc05Zait3R29kSElEb1dWQSsrcUhySElo?= =?utf-8?B?VzgxQXdxbm9ML3V0KzRiV3VMNG5ITVBGR0lRQTF6TmNaMXFtMU15ZTBubDJt?= =?utf-8?B?R2tYOFY3RVpGMGk4SzFFS0EweG1UQlpVQ1haT2hZbGlpdFM4N3I4U3FEZThu?= =?utf-8?B?dzFxZUxKM1BTc0ZOSFpxL0VGc0FPc1BZRmpyTU50d0pmdk9ZZVlMQllpdG51?= =?utf-8?B?N083WGJ5eE1oNzlBczJOREZNOXFrblhTNGVjM2NZNEE9PQ==?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1306;5:4MAMb9gn+ytmxonUTD+PrPkmOJBpBIH0xlq/PX6hVfWQZBx5PK55jp7N3eT9M1gY0wTecElqb6QCa2eyn6o1eTYdjiQwYAKmrFz4RYTR132I/w0jtp3M8IaK87wLk3nG235k8R0dVbUkKPfF/HRiAUrzguQdOpp7MHDJsdiFwk4OLmJrxWB5L4XG8tP5BkLt;24:ekcsA2TuqQkP2EUya0J1RNNmnnzHcYLfwi20f+AV9LKaji8IC09HDc1aO5WFXe40U8QpOwO4sR37qudYX5LeDdsFlefZ+8Ogusut1wWY3hI=;7:6wu/cCfTJRuzCQQXOcmlkjIWsO+EWtDUinD4ATltv30GKCNpPvpzFMcBjvwR54HodgXaVCRCWO20iUG3u2CCzp0qDMpKuVGt8KDfSBFNd9e8QqJxvrvIRrjf1fIRTCD2ma6uGIMwdragUWDU+mwWksrJpD289ZI6BSTQdlKgZVwdAwDuwKJ4IfO3rQJyn6+zbSE7T6AQCXYWcn3yDg2m+3NdDM8X0G8jh7lrv35BxTI=;20:EXY6EVsY/rtFjwQmFfUZ8gteDHxzrEWbcNSp3FPi/9VhKjwSCDXbHSK0jjhGaA59E+/5jCrm/8XnK3T7fDfD1GKWO0BwlxLacHTvLqvbCvTFxQsHKfTbMaZfioqOjTJKIpeLs//jDIfglKMW6cmQPBAF61WqScY7OMYBNY8dtX8= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Apr 2016 17:15:30.4599 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1306 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2785 Lines: 78 On 04/25/2016 07:53 PM, Andy Lutomirski wrote: > On Mon, Apr 25, 2016 at 9:12 AM, Dmitry Safonov wrote: >> As the task isn't executing at the moment of {GET,SET}REGS, >> return regset that corresponds to code selector. >> So, for i386 elf binary that changed it's CS to __USER_CS >> it will return full x86_64 register set. >> >> That will change ABI: i.e, strace uses returned register size >> to determine, in which mode the application is. >> With the current ABI that way is buggy: > Oleg, any comment here? > >> int main(int argc, char **argv, char **envp) >> { >> printf("Here we exit\n"); >> fflush(stdout); >> asm volatile ("int $0x80" : : "a" (__NR_exit), "D" (1)); >> printf("After exit\n"); >> >> return 0; >> } >> >> This program will confuse strace: >> >> [tst]$ strace ./confuse 2>&1 | tail >> brk(0x1ca1000) = 0x1ca1000 >> write(1, "Here we exit\n", 13Here we exit >> ) = 13 >> exit(1) = ? >> <... exit resumed> strace: _exit returned! >> ) = ? >> write(1, "After exit\n", 11After exit >> ) = 11 >> exit_group(0) = ? >> +++ exited with 0 +++ >> >> So this ABI change should make PTRACE_GETREGSET more reliable and >> this will be another step to drop TIF_{IA32,X32} flags. > Does strace start working again with this change? I suspect that > we'll eventually have to expose syscall_get_arch directly through > ptrace, but that's a project for another day. Oh, crap, not yet - seems like, I failed with my test. I'll resend this patch as will get it fixed, sorry. > I think this patch is fine, but I'm not a ptrace expert. > >> Cc: Andy Lutomirski >> Cc: Ingo Molnar >> Cc: Thomas Gleixner >> Cc: "H. Peter Anvin" >> Cc: Oleg Nesterov >> Cc: x86@kernel.org >> Signed-off-by: Dmitry Safonov >> --- >> arch/x86/kernel/ptrace.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c >> index 0f4d2a5df2dc..d7d72f2f8b46 100644 >> --- a/arch/x86/kernel/ptrace.c >> +++ b/arch/x86/kernel/ptrace.c >> @@ -1387,7 +1387,7 @@ void update_regset_xstate_info(unsigned int size, u64 xstate_mask) >> const struct user_regset_view *task_user_regset_view(struct task_struct *task) >> { >> #ifdef CONFIG_IA32_EMULATION >> - if (test_tsk_thread_flag(task, TIF_IA32)) >> + if (!user_64bit_mode(task_pt_regs(task))) >> #endif >> #if defined CONFIG_X86_32 || defined CONFIG_IA32_EMULATION >> return &user_x86_32_view; >> -- >> 2.8.0 >> -- Regards, Dmitry Safonov