Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751655AbcDMQ40 (ORCPT ); Wed, 13 Apr 2016 12:56:26 -0400 Received: from mail-am1on0107.outbound.protection.outlook.com ([157.56.112.107]:37278 "EHLO emea01-am1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751382AbcDMQ4Y (ORCPT ); Wed, 13 Apr 2016 12:56:24 -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 1/2] x86/arch_prctl: add ARCH_SET_{COMPAT,NATIVE} to change compatible mode To: Andy Lutomirski References: <1459960170-4454-1-git-send-email-dsafonov@virtuozzo.com> <1459960170-4454-2-git-send-email-dsafonov@virtuozzo.com> <57064E6C.2030202@virtuozzo.com> <5707B70F.9080402@virtuozzo.com> <5707D9F1.3090102@virtuozzo.com> CC: Thomas Gleixner , Shuah Khan , Ingo Molnar , Dave Hansen , Borislav Petkov , , X86 ML , Andrew Morton , , , Cyrill Gorcunov , Dmitry Safonov <0x7f454c46@gmail.com>, "linux-kernel@vger.kernel.org" , "H. Peter Anvin" From: Dmitry Safonov Message-ID: <570E79EF.7030408@virtuozzo.com> Date: Wed, 13 Apr 2016 19:55:11 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.0 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: AM4PR02CA0022.eurprd02.prod.outlook.com (10.165.239.160) To AM5PR0801MB1298.eurprd08.prod.outlook.com (10.167.216.149) X-MS-Office365-Filtering-Correlation-Id: 7e07f008-ea7c-422d-f678-08d363bc89fc X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1298;2:UNkuxlpkL65RmDP1QxietuwaZDr54N9pL9UEvIgBQ7C/ktjsEbvxHqMWZ1ZM+w6E51s4R4Loz9IC7o3OxE37pvkA4DZUHSAA/jUJbePU2/UOGOldXrspdf18GDpJW0KLVxOmYNR/3wGAq59XjsmazfndZjNvRqmHS2/IjCagJ3HSd0eA/A7SdjMyqPy3IHIL;3:9p117F93ypSiXW1gxQ8iGEcjDVzYV4SorEImdBfOId8uSn0494uwi/BFhSsJcFcpnCFkJzJRwLf8I3Mg5/u7TvHfS4vBP4ScodAW6faT3e2/bgERi3EEahI6GL3H/YdU;25:5GATtYkFQExlMneCViCA8+QM+/eTVkDRp8uyQ4Z1sy5CinrpaviqQALuh+ryOISDLUCPmbq1ODNEgDgtJlDVpFeonwjlmJ+aIUqrTG+wJE8IJV7WjpNH41TugufLX1GdJRbFOVo9LhIiAQEBT+yoPsNFmQKWMjNbMJI9QtyhAzOevjmzm3m9aiid094pxgUFLSn9K7NnbNXkLI3eASRncsGpOrNWSR8oToXVuEPp2hfz0kzV2fotJDmjFTmckujGSFX62CdeI8rka7XWmj6aDma6V0WWan+K5T7AyEkkGYgySr/OSi6DvluHas2nvZUZmMwYPLPDPwVK3o2JXqaxzUWZTlAHlsnEm5vyxPGwVgtp4sVaP1C0ULiRoNvcXX0Bml53kmIwU1b/6/nx2VX8WAfQ7NzBNOvCi9/FBkQq48vFFjWRx0kA0Iu76HTYnIqCiaNvLu6AH31cuvK1qSMS1qsxcTlKpUb+ngTpnAYeya2pa6DhrDZK3J1f9Muu+5IjjfyHCFq5zXvYYU/E9kXkr9GUw5iV5A4GOVLmJYwP5Vrqq3uoQyw2hBo0FumxKGpSrTObRiQyme1NebWHjUGdmU9ZsKTLJjTYvIN8cDf6IfaENm0y+jpxTUR5dS40yRcy 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:(6040074)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(6041046)(6043046);SRVR:AM5PR0801MB1298;BCL:0;PCL:0;RULEID:;SRVR:AM5PR0801MB1298; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1298;4:LQZ0/dfawBe/ZRnGuMENlONcH1AoVnvsIIcsc4GaptRua0dU9GjNpM2DD/2RXgt8zPi1arvZrW/EhXNOASxCKo3KTRUvCGdLClrhkAbbxvFUyPHj5ZBbWziCufpREuvOP1bDe7o6ov1UtJZuZByntI4jl9NuHlRztvuh6FCzi6moJq2TLiHtq24mGN5wZLapdhLc0B0hHc2+iQu366nmsMYpfqWlu0mRWQ6BETXiYtwLzMq00Q3b7O11rOfQCjw8BnjdvKkzQOIevbHK+8i3YXoEWGCB9JoHITC8JPMzcFbX68U9ixId3rCKkDQi391LBy0ffEIw+9SKYm00lLe+BxpkJZEAZLsEDjyu2eJ7flxDqtBSWgV7kOmz4AhZfUbizTUiCpumKsPhIIudzgoS8NIhNEW9YW2pIF4Xm68FIEI= X-Forefront-PRVS: 0911D5CE78 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6049001)(6009001)(52044002)(377454003)(24454002)(52034003)(110136002)(5004730100002)(3846002)(4001350100001)(50986999)(65806001)(33656002)(586003)(23676002)(76176999)(86362001)(36756003)(65816999)(6116002)(92566002)(81166005)(64126003)(66066001)(87266999)(1096002)(47776003)(189998001)(83506001)(77096005)(230700001)(2906002)(54356999)(5008740100001)(80316001)(4326007)(42186005)(2950100001)(50466002)(93886004)(142933001);DIR:OUT;SFP:1102;SCL:1;SRVR:AM5PR0801MB1298;H:[10.30.26.154];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtBTTVQUjA4MDFNQjEyOTg7MjM6eU5jU09qWnVLVExCbXNuZDFESGNWc1Rr?= =?utf-8?B?VldGVVhaQ0gzRzV6M0M3dnFMbUs1TmNjSWZoRE1oVHpFUnRtRHNHYlZaRXps?= =?utf-8?B?ZURWQ01Bakhaek1nbUZzWU1lNDZ2TVM1VzVCZnB6Z1hxdDBMcHBRcHZ0YUhC?= =?utf-8?B?Yis3UXVYNXNzU2RFd2hQMk81bitiM3NOSytxMlUrbko2WXYrRmtyRDE5K2Rz?= =?utf-8?B?T2xEcXlVSW44L1hCUm5qeXZOMTZlTjI5NlF1dGRUeHhnbWF2MVQ5U2dvNWhs?= =?utf-8?B?STJ5RXJDS3c3WE4xeHphcmNtMERoM1Q4TFlOaWh2SDEyM1JRTHY2MUFNcCs0?= =?utf-8?B?bWg5UVQvbnlNMi9tcFJVRWFoOFF0azh6RFM4OHRkOHhXQmh2VVFGY3E0d0w2?= =?utf-8?B?YllUUGUxYk4vbUxpWTdTWnRPcmp5RFh5eEJDbEoyZFg1Y3lJeFFhZmI5S3Bs?= =?utf-8?B?d3BKMUNDUDBMR0VqdWsyT2VWbEYySDVtRDRwSG1ZMGNxSjdPdUpacHRBVStT?= =?utf-8?B?YlRBRnd3VkpiSyt6cG9hamhUK3k0Nk9NanhjOGtNUWNYNG5QVHd0OU82MnZs?= =?utf-8?B?RnBKL3BTdGdGMXI2citsUjlyVnFHbVoxK2hpMGhrRkpibXlvTTN1bUlLeTZs?= =?utf-8?B?MDN4dWdGcURxRFlqVkdUL3hZbWp1MnEzOWJaUGtVeTNWeVA0T2trZ3RzL2p6?= =?utf-8?B?WUtKNzV6eVBzZEZYejViWlJuRXdYWElGRDZHM2lyUDN3NVJKOVNNZlRCcGRm?= =?utf-8?B?YjNJcE5LY3V4Zll0QzVUWStrKzVKN0didFRYUURLMmw2b0lJeFNyaSttcHZ6?= =?utf-8?B?Vjg3Z0kyY0ltVk9LS0d2aGVjQUZScGhDcTVERHZ1UDdPT0JGc1pKNlJ4alRu?= =?utf-8?B?czNnV0FIZGl2WDY1dHZ2cWtTbS90Z3VQMjYyelhoMUtWY1NEZTlib2dwaWYw?= =?utf-8?B?QzFXVmtsQUhYRTJZeVNIMmhwNWp6K0JycDFPU0FpU0Zkdk1WeCtmSTVPaWY2?= =?utf-8?B?Q2ZtOVJxVk5BNWg2L3VqUFU3VmNaYkg5dFFOaWRGYkt3aGVPQWZzYWZqQUk3?= =?utf-8?B?blJiZFBWaGNlcEduTHp3d1hSaFY4aHJWYlV0TjIxa0J1OFFXeFpFaE9CK0I3?= =?utf-8?B?T0Q0SFlUcW1oMEY0ZkYvV0hCUkR5YWtnTEdMVS9UUlpvZkdQamFLYXA0a2pV?= =?utf-8?B?MUs3c1pwSDcvV1VaSGZwS3dTSWJSc1I3dW5BdlpwNWZPVHEvam42N1BLdmxi?= =?utf-8?B?T3ZKL3NJQjVpazJ1NFEwSDFiZXFQN3I4dHo0c2EvRm92c3pqbXMzR0hFdWI0?= =?utf-8?B?NXZSbFZuUlBtQzFIZGNEQnRhOUcxSSs1bGRBbzFuaS9BeHh5QWkxL0YvRkVz?= =?utf-8?B?Y1I1ajRMelRaR3Q1WERSTTNkcFVpdUlYRDVvQ1BFd1JhaFR4WjRldFV1Nktp?= =?utf-8?B?M2tTemU1RjFhRDVuU0NQNFZOZC9CK1NJeGZtRGRSMlNPaW01NndBeWsrQmVp?= =?utf-8?B?SW8vZ0V3PT0=?= X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1298;5:+xrG8Ud6Ry7DZSPnkkR02EmNL88rVZi0dBI+NBBHa4RilAXoOySUYp4Ydyh/dCaQQ1TqZERRbvm9Vu7H3O2MJGFuCufQ9XC0XiOmYeoe02KMOiisiOINYVmTAriElYnoV3YScED3bfbseQtPm8Y/Hg==;24:5gBgQMGk0TSaoZUA2H9ikvuXqO5j3x8M4VEvwZMw0GyL8I2aFqxMF0Fw9ORR6yZihkcYeqRXRSYIuVYEfdgZjLMY/21F2enbwzJ3/GeZZ1E=;20:2BIqAENRyRcfPBEJCDoEShOpfWEliXGdWpkXBUlu4i3CzzsrLZ0cvU7dXLCL1jP/kUyKc85E6dU7PXKUesP1F3YmrcJrOoNxdCixoolFmNlCg09eTdyErtVbMunJ7R0eAz4SiUAO0omEejJGVr1zcfp3KkI07YpqNBJDuWxmZiw= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Apr 2016 16:56:19.8023 (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 Content-Length: 2113 Lines: 45 On 04/08/2016 11:44 PM, Andy Lutomirski wrote: > Feel free to ask for help on some of these details. user_64bit_mode > will be helpful too. Hello again, here are some questions on TIF_IA32 removal: - in function intel_pmu_pebs_fixup_ip: there is need to know if process was it native/compat mode for instruction interpreter for IP + one instruction fixup. There are registers, but they are from PEBS, which does not contain segment descriptors (even for PEBSv3). Other values are from interrupt regs (look at setup_pebs_sample_data). So, I guess, we may use user_64bit_mode on interrupt register set, which will be racy with changing task's mode, but quite ok? - the same with LBR branching: I may got cs value for user_64bit_mode or all registers set from intel_pmu_handle_irq and pass it through intel_pmu_lbr_read => intel_pmu_lbr_filter to branch_type for instruction decoder, which may missinterpret opcode for the same racy-mode-switching app. Is it also fine? - for coredumping/ptracing, I will change test_thread_flag(TIF_IA32) by user_64bit_mode(task_pt_regs()) - that looks/should be simple. It's also valid as at the moment of coredump or of PTRACE_GETREGSET task isn't running. - I do not know what to do with uprobes - as you noted, the way it cheks ia32_compat is buggy even now: task that switches CS to __USER32_CS or back to __USER_CS will have lousy inserted uprobe in mm. So, how do we know on insert-time, with which descriptor will be program on uprobed code? - for MPX, I guess, tracking which syscall called mpx_enable_management will work, at least it may be documented, that before switching, one need to disable mpx. - perf_reg_abi everywhere is used with current, so it's also simple-switching to user_64bit_mode(task_pt_regs(current)). For the conclusion: I will send those patches, but I do not know what to do with uprobes tracing. Could you give an advice what to do with that? It seems like, if I do those things, I will only need a way to change vdso blob, without swapping some compatible flags, as 64-bit tasks will differ from 32-bit only by the way they execute syscalls.