From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933097AbcDYQOy (ORCPT ); Mon, 25 Apr 2016 12:14:54 -0400 Received: from mail-db3on0105.outbound.protection.outlook.com ([157.55.234.105]:45184 "EHLO emea01-db3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S933047AbcDYQOe (ORCPT ); Mon, 25 Apr 2016 12:14:34 -0400 Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=virtuozzo.com; From: Dmitry Safonov To: CC: <0x7f454c46@gmail.com>, Dmitry Safonov , Andy Lutomirski , Ingo Molnar , Thomas Gleixner , "H. Peter Anvin" , Oleg Nesterov , Subject: [RFC 3/3] x86/ptrace: down with test_thread_flag(TIF_IA32) Date: Mon, 25 Apr 2016 19:12:43 +0300 Message-ID: <1461600763-3534-3-git-send-email-dsafonov@virtuozzo.com> X-Mailer: git-send-email 2.8.0 In-Reply-To: <1461600763-3534-1-git-send-email-dsafonov@virtuozzo.com> References: <1461600763-3534-1-git-send-email-dsafonov@virtuozzo.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: AMSPR04CA0027.eurprd04.prod.outlook.com (10.242.87.145) To AM5PR0801MB1298.eurprd08.prod.outlook.com (10.167.216.149) X-MS-Office365-Filtering-Correlation-Id: 7c331549-d95d-44f4-c94f-08d36d24ad33 X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1298;2:pRuXpNsCQKP3nL2srxZF72Mkw1+bYa5HqLuJanq0t6X3HRu0paY/uydhljffkkSWH0W/wEyAk32WG9xvU+5fukUwzid7CVufpQOwas73Rc7B2qrVjrHop4Q6hwprzKv2fIpkQFRCn3gZpylZj1XWR9G1Hd/lkTp2VZOMSvs5XQhyu5KLx1zCJwL+VupKaVWZ;3:uGIZfB1FgEg1jzOBVytyBBreMLKC6KB7zEG5XweA75i8oJ/aKk28M43hdDLTYJbRIpPdfkn2fx9gMvMr7MiHmEqwkOmHR80t8kPKlK/MeJSkyK2uKsGiuWFFBBteMXFD;25:ZNXaAxMrsxPkFeBRDUe267G46+VpJA4zOtB0Z8sL+y/eclJqdALblV9WWDU5ji6Sdmmiv1NoIfohf8iRE6YuvmXC/YHx4UHoSDudceqnsH+tlz6BwgbadfkCDiPTK02/Zv0Hftddt2BIo66zDtBqiCfubg5GnLJ+TX9TNtgTiGPwKohy6Rdishhy0vr5PfeXCdOUVS1AWUT2KGl6TED2MkqVor3Dna6q8Reef7ZFDIUTurlJKexVZIGcTWvDHzoE7l0qgnocXYIJdb6KK+9ri8hRNCUVUS7IlgpzGqHGLTpee4u2C6k9xXUT1Ks8fDSS85l5RA3kKgIEHA0rr7xT1g== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:AM5PR0801MB1298; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(9101521026)(6040130)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6041072)(6043046);SRVR:AM5PR0801MB1298;BCL:0;PCL:0;RULEID:;SRVR:AM5PR0801MB1298; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1298;4:IlSsZ42tE5A/gfTn/S/wWVsfF3COUX4dydC0U8wkmGpMsXRuJtaWaVCDttg4+cH58KeJaflyJLbsA/rYR/cksFwq+b22CucpYpyMBPSXJSBxxXdj+ap5+6SQ7fvsmmnxL8a2aNW0EIV+aQsPD1qNuOKdZN2PReAncTif/tDiQD7Mptw1TbESgE7KZSg74JuRm88oFkZFP4IgyQvZA2IsjQCwf4VOy97ZjIZrZI5eWebX8NvsTRAIik/0fuWvWX+R7VVZeNVAMJSEUtnXyRAkQHOJrHROKQbEuRfL8xSOkpxKTk0M8qA6tmsCnRjjkIlqwNcDEZHQ4sTZz1JwzLImRyIufqck2tRgA2xYgj+RmGTnT9VhE/GCn0Ge9UCSrgiNpMehLHEMJwZd8rTRTQbGa5yehMMwFKw1PJvhc6CsyuMfCk3+3ar0z0CfdiR/LtkyOopOrsoYWxJ1QWoTBZDc/A== X-Forefront-PRVS: 0923977CCA X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(77096005)(2351001)(189998001)(110136002)(5004730100002)(50986999)(76176999)(47776003)(66066001)(229853001)(2950100001)(36756003)(5008740100001)(5003940100001)(2906002)(92566002)(86362001)(1096002)(3846002)(586003)(6116002)(4326007)(19580395003)(19580405001)(42186005)(53416004)(48376002)(81166005)(33646002);DIR:OUT;SFP:1102;SCL:1;SRVR:AM5PR0801MB1298;H:dsafonov.sw.ru;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1298;23:gwugMtmN5Lpek4I65nOiFES8+EbxXOhEY/3AwYHJ/tO8O3/84TT+VycpTGR7yyK0/D/tzrhqePO7R7bks9ewDObVeLDPXpNnvGTjEW8itO6duDq/85sd4yXIOS7As0QlcTZt9MAoSrH79Vwwk5IdKXVrwb8BjakkK/lNMOz7yge5y0krSnbdvl5ifggL+QsEy26na4vYs8UvsFQrY8Q0bUz3Zkx6QkFgzkJjTNyHjKvVpumnHvi22fP4yMta2qvD1en0UeZwUp7RBWXCGApcxNa0mfLH6DJ+XUcD6SjGY/A9S84g7a+e4k17ySnLQpF0vTNLEDyRWkcW59NpfUyQaCITpBmPNxub9XXuKr7Tx/XVH1F5GcKAcbYtmLD/CUm8ik974LZQXj+VCKBMkfBPL33VDKL13pHK66CfAKxiqTSVtCW5hJfxsCQed1mkhzzSmdgrryNEamIO0y7+PT+WW/wxoDPnMiM5pbUPZ44TTSeOpC3gfpwhnALr15oHQ/mdCF8XeMvDrDVzTHjuDRzC7oJuNiFBDk7ELCvdiUML2ztfyphloTD1G1v+4DZf0BcJwIDOnuoaPzxuzjEOPVlkkBlf/gbEKbhXuyoGrMnDNOGojskr0MqM3PHEgnawJSkqmiBruO7iJFXmLRqBWr8Nuhn4YO2jRUynWwl32sHAcRZv0Y2yCQyrX9Wb+Zd8iDAWvjjnfhfjMIXMZuuY7Vnygs42lii3+e7n09B9BWJ3IXtDJuVtU18mCmNYRa896oUcYb115mMibzaEVB6QfsSh0yj+qqh19igCsT1U7uwd4O6ABia88r7y1swiTtxfGUKgBvwczCn61lzckm1BGcF/dpbGYemeA17LudjhKKgZoE0= X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1298;5:v2lEuCkOSomdvGCxx9W6pvG9nCyoTczC7TuXKsOs/UgctDfvhfiKVbtyRcjADHCl6cjZz2YTZbxuFxAwXw7gMg/mSt9WhiCD39yVyXP4hAqWrD7BmubAiv58gJWtJzSZ2coqgIOdwBea35frBXuKworWbx7uoERM0eeVAPuORnYj1/RlX8+uPgVxzkzVQdsh;24:KZ22iM8I/G8+Ikbgl+D+4MnvfledxBzzGRUWBBHpe4iTQSTvAfEMhfPestgglwdMQFqiRwB8IK0BZggCm9ISnVDJb9U/E3J0igAOvO0e6sA=;7:Xl+V0rAdrJlxBykV0ngR3X6Oe++JW2GShO6oVWfaY9cY1e59L2DsJqpkglS4YaDEeb1JUCOW+DaDJTWtj/MoqPINk5bnRsgVvEFhOn3fIVfqA4PGSy3IUwUeAlQ7OzEcJwJv4ZB3ACTTuox7N8/mLfz1SO6LlaO4SnQln23s4ga+jKF4hSKvBUUVkVYGQPN0fLx2mHegPfFd6QG0s3LrCVShSmzMLamXmnt8E9V0ctc=;20:FaPYENCMHjLqIbzh+ft41dlWcyHCZfXjuS3UVTGj5gNtAd3NUizPCX2FkV3bp55DlC0217F9r3QlFZK9tb2u/SrOYgRSGdFSQwYXZKgi6dlp44B+cqMK70W3zY99len5N4n/mtCoYbL4LMH2ypMv4hE4DKPwuQ6llBFF7DZ8VNs= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Apr 2016 16:14:27.6161 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB1298 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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: 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. 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