From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756885AbdKNWoT (ORCPT ); Tue, 14 Nov 2017 17:44:19 -0500 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:33856 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751233AbdKNWoM (ORCPT ); Tue, 14 Nov 2017 17:44:12 -0500 Subject: Re: [PATCH][v3] uprobes/x86: emulate push insns for uprobe on x86 To: Oleg Nesterov CC: , , , , , , , References: <20171113221139.1516536-1-yhs@fb.com> <20171114155124.GB17667@redhat.com> <20171114160304.GA19323@redhat.com> From: Yonghong Song Message-ID: <946788b4-e57b-c7c2-9ba8-3c6fe87c4af8@fb.com> Date: Tue, 14 Nov 2017 14:43:32 -0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 In-Reply-To: <20171114160304.GA19323@redhat.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [2620:10d:c090:200::6:8c67] X-ClientProxiedBy: BN6PR16CA0025.namprd16.prod.outlook.com (10.172.26.11) To CY4PR15MB1831.namprd15.prod.outlook.com (10.174.54.16) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c8799e05-7cc1-40ba-ee6a-08d52bb12569 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(2017052603199);SRVR:CY4PR15MB1831; X-Microsoft-Exchange-Diagnostics: 1;CY4PR15MB1831;3:F/ZQGqQ8WB9bPGZqdOjzCtW544WmkgTs4Pgs0FzldqEkY/WjMPB1krAJp0uQC5B+hbYdVBiEQ/RvahW7PmV1c+YOA9NA96KmUM7WLlrHQ0ptD0oQOEj3fkYYntw3HRO1EnT9pR2glc43V1yRWdu9PGOCqNJZCj4OC3eZA6oEcNYUpBEFP4gN3UmrV3OwGoyPm9su3OYCVrS8+BcDfU0WECbsjZOM6IBEmOpouimYRgCVQTHo+dGtiASDHyb+g77j;25:Mq56G/9T+f3Od+PLWaaE9+L7oTvVLWOJCsoDVc4XKoMzf1AdmyNejNIu5DXnFTTG1JLHQR3E7SCnCUz6oHCblVlz0ylq454WokhZUyz7xW74+8oQxqThjwAPpUIZypwHzn/D80MMEwYzrtuo86Mjuq4xwp3rcXs+5yIkaoMqmqg5dF4GWctzjqhTGyAxNGPwO0iPPRzYUi6CRxFlAhsk9/x/Sy8+CLuWXDahANvbKDUCanIWaL0s187Xo61rCBh+mE6DAwRukRBPUfAndFYvHUtp0+ndU760U3nU43y0OsDeNMlI4RsmENQadgQ+eeJ5PCcpeeMHtElx+pNVJv1XVQ==;31:km4nuXgxW3jeY7Ulzx5aXQ9cIymIngziAyJ0b7ZkM9Y1VMhMTs16JqpwP+uBvGuTU4I9GiTw+rsfiGwkUeJgJVXfqTx0MoNR0dtwQDKghXWb75f3+FXYt+46LS84066UO8/M4Qu/I8yHorg5bjrkT32b2CU/lfyzI3tySjSy1ZQpWFus4N7dmeR0+dNO5ergBeN3IdIN6oh5ZueiagYHFUmosUOaTp9oKWp2xKyvhdM= X-MS-TrafficTypeDiagnostic: CY4PR15MB1831: X-Microsoft-Exchange-Diagnostics: 1;CY4PR15MB1831;20:cryBmuGebWaVdOIkXp+vATp8/8fDtduLT8rWI4Yxzi2QDUlyxp6Cs+zzKA/gmI85RyIouWL2mrZgIbZ39lagNOIg+jFjGXFnaexNVTLAI9kRh42hfvEnpf4S0B/JfaRnBzJ0Af+35UUbxONidjvQvBxrDluQ1hO8X2qJ/7qW/qpYUKMBWNrxOF3ziA7xAJprjRF40I2Vzs1A/P1vTrzSi4vd4JjfShki8tjp2MrzB+my9mFj0RiG0W8U2aj35snmW9d3mcU8HxByP4Ct8UJudDAM/ceSbgWuH4Vr2pZPWMMp8eO0VJx3hxmAuPmc1hQyB3kPYe/YA0PMSUXRDOkQxuI6daN0M2cUHmDgAo5PVE5uDmiYElMlQgh0fQ1Qa3lrE6W2ll3iVPx26mbPtYWZN/fCpAd6qBQXHi2BjXHU+KwaA2j3v1W/CgpvHNWEX63PepySzmK6TxCaDnQ7jzoZBuDnEi/VT1NUChTthbd+jTMeC7XG5L+0u8Ex+mIos1jA;4:kilPD3LDVa8gvD2ZJKtAoUpvyaSMek/9bxSIinMFj9oqgNPRF+h0xiTz2h66/cyhCpSsxPZM5HCbXCZbGBgsLUHTzO0BNwLhYh5eynpKisynTPWJw0W520EaA4m3Zsak1J795c8AACNBG02G7U3QJcZb5M4C84+0dBo/1/KgaX+tkJvDHWnsT9xulL91yVf6ChK8eSqg3YUQvoP424ecu2spcDnfezcCMtbpGc2ThYDAJkSrQY6Yuw28ZNdzUCHzKax6DsrA5EYLwtmNSyv07w== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(11241501159)(6040450)(2401047)(8121501046)(5005006)(3231022)(10201501046)(93006095)(93001095)(100000703101)(100105400095)(3002001)(6041248)(20161123562025)(20161123558100)(20161123555025)(20161123564025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:CY4PR15MB1831;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:CY4PR15MB1831; X-Forefront-PRVS: 04916EA04C X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6009001)(346002)(376002)(24454002)(189002)(199003)(81166006)(76176999)(54356999)(229853002)(7736002)(230700001)(6512007)(305945005)(5660300001)(36756003)(97736004)(478600001)(6486002)(6116002)(50986999)(31686004)(65826007)(189998001)(81156014)(101416001)(65806001)(8676002)(65956001)(25786009)(47776003)(6506006)(50466002)(6916009)(67846002)(106356001)(23676003)(53936002)(105586002)(83506002)(2950100002)(6666003)(6246003)(316002)(53546010)(68736007)(8936002)(33646002)(2906002)(4326008)(64126003)(31696002)(86362001)(58126008)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:CY4PR15MB1831;H:skotch-loaner.DHCP.thefacebook.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTRQUjE1TUIxODMxOzIzOldzWG12d0VoTmRoMStPbUJ4RTk4WWt0ZWV5?= =?utf-8?B?L2Z0TFJ0ZU5qcENoZkV4RTRuV0FaWlg0NXRwaFBjZ1U4UlB3K2VRSmVTb21W?= =?utf-8?B?amNDOGxaVDZXZE55UmgrS1FOK1JSSmhGQkpEOEM5bHdla2ZVNWRyV1dLeENn?= =?utf-8?B?bGUwMXRpTmZLbWJRWGJic3J6MVRZVVdEV1kvbndUbmJKQ2lIdzZ4ZjZ0ZzlH?= =?utf-8?B?WUsrWkVsY1lwUGtJemhpcGxKK2xmV0dLMC81Vm5IdTExTjNGRVczY3dLOE9W?= =?utf-8?B?WXFLNjFJaHNPQkt0S1RpUmJvQXlScnEzNWdQZjZhUHc1Si9VeHFUaFNRNmp1?= =?utf-8?B?enR6NEoyd0ZpS3pLaEp1dGM2eG1BNUhTZ0JUTzhZUUNnNjNrMkQyK0lyaEVh?= =?utf-8?B?b09TelB2L2FsVEVpMXgySk5pVlZRWHNhTnBTYU9mZUtCQ0JlVjJqMzA0SGlR?= =?utf-8?B?RCtGS1BUbFhtMUlHMHdzbzIyeTRzdzJKZmk0S3puK3VSeU5OdzlIYUNISGVD?= =?utf-8?B?T3ZVUlh1ZjZkaXRDRW1hejFaRVBwSDNUay9zbWRLcmJlUXRaK3o4OXE1NGQw?= =?utf-8?B?VzBhMnZLK1U1amJ0eWRHQXRPTWNRdDBUdlZucUtuOHAvNG5XUTVYS0lZakkr?= =?utf-8?B?eGpqWElTYTZMTjI4L3BBRjNyc2wxUW53bm1xMkVuc2N2bVpiNDhmUjE5MG5B?= =?utf-8?B?alNtb3U0QU5oYk04WWVoZEttU0NrdENxaU9ucGlqSGoybi9RSnN0YWZhUHVl?= =?utf-8?B?aU40REhCUFgzM1B0K0djYUFZOFZpMmlUa3dmOHZqQjZLV2hLYm1DSncyR0tP?= =?utf-8?B?U3JwZ0FjOGtMbzhMMjJ5bVMzMkRtV2xRNGpEM2grdkFQZHA3ZC9nVEEzOHpY?= =?utf-8?B?WE9Tc2VmOU0yU2lETU9QVkQ0ZHZ4eFd5WXc4bDk5Qm5oSVRVTWo3TmFKempE?= =?utf-8?B?QVNyc1kzQ3ZFVlU3eEEvTmV4QzhKeGtKQ0p5cjF3Y3NkLzFudHowcVlxbkpm?= =?utf-8?B?ZG15NmtxTHFBK1UxNGFvKys2anRoSEJhNWlCSGdPNGc4UEVXTlZneTJvNE8w?= =?utf-8?B?dHVzOVFOcXNDb3htMmVkMlhTVzM4ajRYWVhyaU9hWGl0djNsWnZqUmQwR3lh?= =?utf-8?B?T2RlZko0TWR2djhrMVNFZjRWUDEyUHZBVW95ZEFINXhnaE5vdUU4NGFsN2lq?= =?utf-8?B?cWJ1cUw2RSs0YlZZbXZQUzgyWFBnOWtQYitFamdGZzIvTER3cms1SHJld01j?= =?utf-8?B?SGFxb2N0b0txOVJBMkx6SVdKMVVZWE5sVCtZeXpUREVUN3JLcU1YNkpYOVE2?= =?utf-8?B?VHJ0RTI3UVB1L0JSYlNlOWk1MUptTFFta3hRMWlxK1FwYlJKK0FTK1NsR2dJ?= =?utf-8?B?Smphbk9ZNUtyMlEvSEdTT1hQYmlVcnh6WnROa0R1QzR1WXEwVmtWNS9UZUJy?= =?utf-8?B?MmJoSnFFL3EvdVVrVmcwaEFZRzE4YXE5c0xBZWJZTXNpSEZYdk5rMVpxOVgz?= =?utf-8?B?OUhmUmJaVFN5TEVOcjAwRmVQVDZhVHFZaXJTUVQ2Z0lROE1YbG53UlMzMzFx?= =?utf-8?B?Q3VydXFkWDR1aS96c3FRbWp1MFZYWTBuSExLcUdOVzZFUVUrM1RocEhDNDFS?= =?utf-8?B?Q1NZUU1MSFpGWTBOVFllb0xMTExUdGI0M3ZwOGNZSFNEMkhwaVlBOEpFVkQ4?= =?utf-8?Q?TnWsFUdLE4Rrfmu1c+OiFFVJLGtUQs9Hom2wg7a?= X-Microsoft-Exchange-Diagnostics: 1;CY4PR15MB1831;6:IFdWQct8CVAgxGp7o6ffMK/VLzx7u4gWQTTmthzz2W2unwoTiV48b3nJCuMtK1Pu0aNfdBuaMlrJjLfNDHHyjTFh9sTttG4DdYbqDSe6DBHXg7I6KkaIp7vKNiSBD3rSVCEuQkQKoMPCRRzG5TxHeRomxbV1aTnKJD1rvbIDac0zfdqGRRi/qfGY2M0imHN4bWuY3n80c4leSSOrnR1GN2WzYRLmvrRVJrAlXQh0jj1DIsXPGP27gdFHyX334h+Qou/8TLfQpxH/hvXdmeRyoYqNGvaG8HmssV8pz1QCwlPpMJzqmLUWkLErpkq1/6WLm1OYaepwdUfP3q0hqhIGzfRqECUNdv3S5Iv+3BUxPE8=;5:ah9buOlbzFCmzmLdJJl0HkE4hi1P1IB7gooahdbI9effTmru7ccORjbCBYfo9OYAtcmGvrOqnZHIkZ3hbG9t/0hnvma/OFLkLSDFwOZS7eu0iyS64iL50HD/sbOVq2Fv4DgMvse34vaoHEXtcmSJeUmTX8JanK5NMfjUfsF92Vw=;24:1C3FM+8DvQm9nX33uS6J/G5SnGis7neDLBpSAM6cKlTQeUBEnb9mTxkwUG5fxvwM1NsSPRfoAg0X452ScOYKzB2AlSIl9YYTiy0df+izQSI=;7:NAq9EhiUw94oLOY6VPVY0iIHgV3NQvMpsToY2hdUe4AfRgdrWIOSKpFQYnR7r1/Fh8AOcSKE7vUJ7BettLoOvBCsGsgFaDUNMLU2PZF9aeht1ptppt9ekbatxSe1WjZiGSJPkdINwtpfptPpglkF/zXyxW2iwosmPuFc4gb5Vu0kF8o5ONxIeAuWSOhBtNgXUQ5U2DbpAoGC66kTt6BUpMfBKNHY2aP5b8/Afz5Uo8srDLh8sNKquoft6Uw7mf8/ SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CY4PR15MB1831;20:ptAwzElOgBQXufj46TTxDIACf6baQgMngbf9CpyFnQlgtymhUM0iVNhcqsu0VvCZ0DNvBYBJ5iY1kM6zlewjNgrYSct/yCGAIZG/trASNx8QIRbdSdXDXYavSWu5WeDNlzF67KMTd/vcQYaX+mE2aGA+ghzgcFBwF6jmqtOh5cw= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Nov 2017 22:43:36.3604 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c8799e05-7cc1-40ba-ee6a-08d52bb12569 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8ae927fe-1255-47a7-a2af-5f3a069daaa2 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR15MB1831 X-OriginatorOrg: fb.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-11-14_12:,, signatures=0 X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 11/14/17 8:03 AM, Oleg Nesterov wrote: > On 11/14, Oleg Nesterov wrote: >> >>> +#ifdef CONFIG_X86_64 >>> + if (test_thread_flag(TIF_ADDR32)) >>> + return -ENOSYS; >>> +#endif >> >> No, this doesn't look right, see my previous email. You should do this >> check in the "if (insn->length == 2)" branch below, "push bp" should be >> emulated correctly. >> >> And test_thread_flag(TIF_ADDR32) is not right too. The caller is not >> necessarily the probed task. See is_64bit_mm(mm) in arch_uprobe_analyze_insn(). >> >> And again... please check if uprobe_init_insn() fails or not in this case >> (32bit task does, say, "push r8"). If it fails, your V2 should be fine. >> >> >> To remind, uprobes && 32-bit is broken, let me quote my another email: >> >> The 3rd bug means that you simply can't uprobe a 32bit task on a 64bit >> system, the in_compat_syscall() logic in get_unmapped_area() looks very >> wrong although I need to re-check. > > Yes, > >> I didn't have time for this problem so far. But emulation should work, so >> you can hopefully test your patch. > > Ah, no, sizeof_long() is broken by the same reason, so you can't test it... Right. I hacked the emulate_push_stack (original name: push_ret_address) with sizeof_long = 4, and 32bit binary uprobe works fine on x86_64 platform then... But that will involve a bigger change to propogate the is_64bit_mm() along the call graph. > > OK, I'll try to do something tomorrow, then we will see what can we do > with your patch... Thanks for reviewing! I will wait for your further comments/direction before next step. > > But it would be nice if you can check what uprobe_init_insn() does in this > case, see above. As mentioned in my previous email, for 32bit application, compiler won't generate "push %r8" as "%r8" is only available on x86_64 platform. For 32bit app, I see "push %bp" etc which does not have rex_prefix. They cannot be emulated right now due to emulate_push_stack needs change. > > Oleg. >