From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933306AbcDYSKd (ORCPT ); Mon, 25 Apr 2016 14:10:33 -0400 Received: from mail-db3on0102.outbound.protection.outlook.com ([157.55.234.102]:58592 "EHLO emea01-db3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932905AbcDYSK0 (ORCPT ); Mon, 25 Apr 2016 14:10:26 -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> <571E5076.2040802@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: <571E5D51.2060809@virtuozzo.com> Date: Mon, 25 Apr 2016 21:09:21 +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: <571E5076.2040802@virtuozzo.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: DB5PR02CA0023.eurprd02.prod.outlook.com (10.161.237.33) To AM5PR0801MB1298.eurprd08.prod.outlook.com (10.167.216.149) X-MS-Office365-Filtering-Correlation-Id: 454ff4ee-ec49-4693-a6fc-08d36d34dddc X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1298;2:ET5TcBb0lN7gfeJftp91/Hz86IY6Pni/Bjek7Crj/mu8Xx2qyPCfU1hwH3oU90ek5YGyKtBxg9cZyOyHN1Fn4Kc3UYSvAjAbbgDsdpjYMG6a1nRo9GCjxBVQYpDar6NJpjbYKfqW09O9ehew/R0A+/IlUUXMnxNc9vh0vZ2XsA3xJLf0Cl7XV7i9EG+fPp8B;3:Fi4akKHbj7LKMsgIazMo0sUcZxRO6Tgf9P5HIYORRGdxSHSAD/RKfKMQ41lRFA+4fa3C2/RJQ+r9NgKb31/N2UyohPn8K9xXdQBfHtah05SB93gdwtNpZO5/Y1sKdmRQ;25:rjT088RnnxV0UmBs6dheBb4aV4i2P5w6pKx3l6G2i4Xvoa8IO4elH+IsoXzzXQODZ/dotPs18qufdri1pUo8BZeUOsFxxf2RRkN3ipIhdIfCVp/+o07/m5plLuCL5Sz0ZPw6B8q6+4fInIriWQezLVeolR19GOGXYS42a0JxYkRorPwsbiUBkVMNyA5N43f8yS9YRUCikqS6NSFZB9XnK8RPmHh8+wjsMVz1HwTXM/pnX2JdnqIPFSuDOfZE1iz/5knROa+Ff/oPO0G8DGXc7lxn66Ejj27gUAZJer2Bzswou0to1/8AWNDIKzIzXrGKqacRISJIrOYmmz7/oLBrjQ== 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:(9101521070)(6040130)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(6041072)(6043046);SRVR:AM5PR0801MB1298;BCL:0;PCL:0;RULEID:;SRVR:AM5PR0801MB1298; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1298;4:AK2n6GNnxnDC8Xat9l8mYse2hHEOw5tQBwbdmK++7rraoC682aL9NgoV4LBZnWSToWHApAmQpAWQKZqANyYw9cVyAM/3Gqe9XQPPs3aDaZM+fKLZNqHEo4+PwUA20RCwg8Vlu1dsalycAANIdU/HLKK8Fjzr0FlcT2iwsWTdlzPfn1LJPjZfHIuLmoOVJxcUQvxicO/M04Hq89wKBKlTbJ8SERGLZ0cQaVLB5IViHbmQXXVUwdPR57VuikSERrCPEiVzqipC1C8sc82N2BnKF2kiwCAHIo+xo9zFkVPdPW72p9hJNi4JoYiFrLf2upryVqk2+vW/ZCuX2rVtBwbRe2IgQykO19Xg5/MMMx1zChynCWKzQgyOQEo9A6ThcWTA1NMxVlubaLVAa+kOsF8BZ3jHNvmbbgnpl1ngOypmMywPaNfaELI4NUA2TDpCcN7oEskFmAkGNYifMVme1x1ytA== X-Forefront-PRVS: 0923977CCA X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6049001)(6009001)(377454003)(24454002)(5001770100001)(65806001)(77096005)(189998001)(5004730100002)(65816999)(50986999)(87266999)(76176999)(54356999)(47776003)(65956001)(66066001)(2950100001)(36756003)(5008740100001)(2906002)(92566002)(86362001)(23676002)(1096002)(6116002)(3846002)(586003)(230700001)(4326007)(80316001)(19580395003)(19580405001)(42186005)(83506001)(81166005)(33656002)(93886004)(64126003);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?MTtBTTVQUjA4MDFNQjEyOTg7MjM6bjVzR1JWanRWVXNwOXdvRTB5V0dubHR1?= =?utf-8?B?NFV0U1pDUEtBQm9lU3UzR1pMVzE1MEdyZ1RNQWt3T2N3c1BmcE1uT0NBTk1m?= =?utf-8?B?bERqSWd3cUZOb1lDQ3M5ODBUaDVNNFhKNDVLcldZR1hxeG8yWkhuaHcyVWpY?= =?utf-8?B?Q05PS3pxNTZvU1loTTMxdXJZTnZEbHQwS3c5UGpJazJCcjNoL253MUJuZEFF?= =?utf-8?B?TDJMUWJvT25sc3RJYkJsS1E2NktsRGplaHNwak14RytLNFJvcWpyZk5Yblhl?= =?utf-8?B?ZTliWFpGOVdtZEw2NnhjM1UrellCVW5GcVgzemRubVZaQ1dURFQ0eTlZdy9B?= =?utf-8?B?OU1WOWcrdHVBb3NWZCs1OURhWjJPR3lkQVp1aEVySUwzNXNIVi9rbEVRTjB0?= =?utf-8?B?Y0dNS0RrbGZMODBlN1RpTTdiUlhJOUlBR1pqT1k3VEJObUpseVF2Q3BJVWhC?= =?utf-8?B?Y08zanlCeUoxYTdMMVQzaDRSQkgxenBMMWx4OG9wc01zM3FtVGNFQ0FSZlg2?= =?utf-8?B?aGRnbGdCaU9FOW1ZelBxQk51dW5ISG5ZcGRSTDY1YTZjaTBuZHZPZ1B5SHdT?= =?utf-8?B?UW9UWHlaUXdyUmRZd1dYZnFxRUwrL1pvTmxZK3FtWGpyMmNvRWhtN0R6UEFM?= =?utf-8?B?cHZTaG41TUJOa1pPTkZqNjN2SkxKcExxRTJScWJnUXBZS3pqeE1LR25SSGlY?= =?utf-8?B?UmQvM3lNTVZVT3MyTWRPNmRxTmwzanN6NHdndWpWUlgydmxENFU4dHFlWk5U?= =?utf-8?B?cnluNlE5a3VaTVhTc2hhb0hoVFlNUW9GUnI1ODFGbEt0bXQzUzVGaFQ2K3Zo?= =?utf-8?B?R3B1MWVLY2NoZmhOZzhVaTVoM0ZCZjd6UnhuTHNPUi9LaFFSMmUxQXQ0SXRh?= =?utf-8?B?Rk1Ya3RDaVRXKytLcmg1SkZXajZvKzV3TGdSTmYxUDdneFNqczkyekoraUli?= =?utf-8?B?dFNsMGF1Y05WWnNBY3h2QXI5UGFwWkpvMjlwY3BkWjh6dTdNWmlZRUoza21M?= =?utf-8?B?L2pZeVlJN21tRHF3T0U3TmNhMWxGeEJJeWRZdlA2NTNReTBHeWhNTC9vNE9y?= =?utf-8?B?bFgvZHpnTms2cWJVK0VBbkdNcmVVR29rYjY3NDlaREhqT2lzMVRLQi9HYWpl?= =?utf-8?B?MlpWZGM4emJTN2ZGbkFrNXdQa3NIaWFZZGFmR0t3VUU2UlhoM3ZvQTZGTjRV?= =?utf-8?B?dTJPcXBWOERSa3FydkhrcEFtTVovR3c5RXVmYUEvNzFXT29XdGwrTFhHUTFj?= =?utf-8?B?bHRkc2pZSnZNV0pQREdKR2RpZkd4NUtpMzFZaTVqZlJZVW1yanNDWGl5cHZD?= =?utf-8?B?UEM0eE9zeHM5Si84dTE2MmFmL0RQcStjTHdnclE2VkdSbWdkdnMvYkNPSTl1?= =?utf-8?B?Q3YvaTJhSi9LSkwvYlBhUkVHcXlxTVptRGVOeUt3NEJ2dTYrODdidkl1L1Fy?= =?utf-8?Q?Yy89NoVU=3D?= X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1298;5:iTnh0qsTTFPwbqbYjprDWUgphv+IQOFVnUWBFaVg0WqW/4R3smYNWzgQkOFUzBxaMG1XKes5apSo1XQvgpC+eDGxxJmAGsQFBHCSH8JfEExXwldB4h+pjjLu6OtYdENFIv19G/zbEvjSRsKj60NVtwRUnesLfQkMIS7DvjPdO7wGJvjOp02W7Hpgr4NGn2U2;24:slSO9+D5rScrw+yejVC0SytRBRIs+ggzU3ZUY/ikv145qwzz+r5U8tzF8IZA6D3LHg35Ewn9Q76vWs1Wu/KEOk9ShfzzoyB9Wrv+hkvHxQ4=;7:INZMSHrsEFfMBGddeuQK9D01YPcvzjk0fUX4HC580Nw2sZQUNIJ8I4fUd690FXDkRkefxHBw2fnMKDetKuiYmnB5qt7YLxyH+71mNZKiZjFWYI5yZrX5lSaw+A0bLhXbsyL40jO3ZiJHl6KdV9M3O4z4yr37lEMhL2UgxAKX+hY+rGilE7q3zZrO0O8Khbo8m27AB3cPM1QLc6eQMPYXZJjaOzDRYue+AH7dBA8nbzM=;20:IwK6jYB7+gaNaKJBYMVoy7dwR9Tqn/e1bMVtXK9xegiSPoZ8SRBhS+yAUO4FXevXVt2V0iXAnyl5CeyaaibQW7GME4O1NcNoKzdnGIepD51Uoy6gdoidtHaQ1LoV7ewiiD+Ya6sT7Tv/ERPF6kRog8Zfcry3zAaIierxsZ51n+I= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Apr 2016 18:10:20.7167 (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 On 04/25/2016 08:14 PM, Dmitry Safonov wrote: > 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 find out, what I have changed (and broke test): > if (!user_64bit_mode(task_pt_regs(task))) was > if (task_thread_info(task)->status & TS_COMPAT) That way the test runs now: > brk(NULL) = 0x1145000 > brk(0x1167000) = 0x1167000 > write(1, "Here we exit\n", 13Here we exit > ) = 13 > strace: [ Process PID=1608 runs in 32 bit mode. ] > umask(0) = 022 > strace: [ Process PID=1608 runs in 64 bit mode. ] > write(1, "After exit\n", 11After exit > ) = 11 > exit_group(0) = ? > +++ exited with 0 +++ But I changed on signal patch rebase and now I'm thinking: should it be > if (task_thread_info(task)->status & TS_COMPAT || !user_64bit_mode(task_pt_regs(task))) or what? Should we count program that does compat syscall as compatible even if it's in 64-bit mode? > >> 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