From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755521AbdKMUdE (ORCPT ); Mon, 13 Nov 2017 15:33:04 -0500 Received: from mx0a-00082601.pphosted.com ([67.231.145.42]:33630 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755185AbdKMUc7 (ORCPT ); Mon, 13 Nov 2017 15:32:59 -0500 Subject: Re: [PATCH][v2] uprobes/x86: emulate push insns for uprobe on x86 To: Oleg Nesterov CC: , , , , , , , References: <20171110172546.3185266-1-yhs@fb.com> <20171113125956.GA11516@redhat.com> From: Yonghong Song Message-ID: <6fdd9773-a0d0-7598-35d4-959bb3701d1b@fb.com> Date: Mon, 13 Nov 2017 12:32:18 -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: <20171113125956.GA11516@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:5c0d] X-ClientProxiedBy: CY4PR0601CA0035.namprd06.prod.outlook.com (52.132.96.48) To DM5PR15MB1834.namprd15.prod.outlook.com (10.174.247.11) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9736b1e5-b118-45a1-f094-08d52ad5a585 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(2017052603258);SRVR:DM5PR15MB1834; X-Microsoft-Exchange-Diagnostics: 1;DM5PR15MB1834;3:jS8EweGJqXvAyzuFt25y3Iirz/fuEKob1kXvqh7qBf5HJMinjt7h+NL9TT1ZqhIib9yb0iK/baFb83Ncf4Bit1hI6ftHrFJkROHTxUDOkCLtAPgycHFJmAtxktEtfMYv3SfAIMgn87RxlLT2wM2QzsK8TL3LX8WwCc3Oech1NXWcTggWzb1vuIPRVSnMcUEIzJr0UAFu4LgnK3/ICzWyvPptatmeG5FPmjl2urbaMT4gKS9uk2R+CdHozvjUp24K;25:xsXtDF9GMoH54zypMtjVkKsesKOXuCaARWtKY4byeJ1dfPwjs39kgZHNjQMUjiJVmk/SXxrfymygUPhBTkZGrfJmbeJnsxqfQjRtBkQH5YVtLHYVmfOsa5ANUOHueFDoI05+XJ11C/jSyGwCgem4msBIDjU6GwcZqbszGCzvF611CBFrugI5Ry8WxhdXzhqJbKv4E4Jz8pmDTZCyqOT+gUA/G+SX9CRF8XBiVnDzNgZsc0UBTeyBRvVNcKjD4OwPJor8ejafT2fgyPwO+BK6q0H7gc9xRO34xtzEhC3yJkGLrTPjicgsN8evTFJUWnhQNoYmkL8KMiYIQNQhmjQkDQ==;31:3l2yf+nbgoW4SCWoCV+OAk0J/9PMSObFEbktEJFBcEJz+Ew3k/k5hQj0KDKVR6cr4vSzPKjoiwb2d0OeYl0+IMWCtIXcGqj8xHAKDU5w1unnv1p/6RtgsvYqsc6dNGjpW89s5iFEpAuqVvDt/5EAkTJE0WOjcN+hIVyxiXkSWfa4oluGYvScLpYdes9OU7rGhAruGAXJ/k2+2WqwuDDsQY0MReKiBVduA1xHkz8qyw4= X-MS-TrafficTypeDiagnostic: DM5PR15MB1834: X-Microsoft-Exchange-Diagnostics: 1;DM5PR15MB1834;20:WLlQsUNUo8tzDE4FBLzTKWmjRdo+U/2D/w4RUQcjSdd8BN1BGvP+LtbMvS9BMLoCGMHqshXhRSKBFnAGyVvk/DJx6WccC347wgzn8qmTHeoMY9Z/pgPH1CNO855p9ZXeKKcC69nk0zHCE3F39ReCRLONBxMEn9ETy5NiDBbDSDDVoa2CuYa9mpXkWOe4I4GTQoXP6+y/hDX6tU1sUaNJzNSL8TK17L77zHJnVHrMr99oeXiCp+TqP0/AKrb1Guh9+Pzujos9SzFclDdlWqL+/y7kPNIfpc/M/apoe+kp2nU8CDmdKVxyACYcg4HV+SB1vLW0LF7e9NtVmFYypLLLLvGWfgRwvSVp7OwFJydH8RC5c5wCC0b0Jdm8DZPLo9ss8q9PepLKbG3SX4SCYgdhwj1J5wtcALeenu4IjSOyk6UkCVU4D/mbvBhQsjf/E3564ub13OFM+A+OwJuQrbMzNwT5bBvCpCE8N38i9jCD1R+6IyIaESxdsjtclsJ9nyBY;4:XrIXAIgG8Jh3+Ks48zzgtFRnyzho/yxfaQinjnJEiPXBhDhH0HPdtOy5ypN5eJK5zHTWQqCDPnIfW69Po+RzlvUbhDSxElzvgpEDqLHnDRonoHpSjddGBW43MdVqc+oRGaYX3otoW8UTKZ2a+O40TmKFLj4hvimdopx9/pBjK59jgx3YERXfTjMLn8owg9cbeSBYy1qE5U5AI6x9rgTRsuGIUcVWTjv4ZLrZySek/hik1qiWbHD/Y0LAomigxhro9Y7zrLp/iqa5pLghf5kUZA== 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)(5005006)(8121501046)(100000703101)(100105400095)(93006095)(93001095)(3002001)(10201501046)(3231022)(6041248)(20161123564025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123555025)(20161123560025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:DM5PR15MB1834;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:DM5PR15MB1834; X-Forefront-PRVS: 0490BBA1F0 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6009001)(346002)(376002)(189002)(24454002)(199003)(6916009)(6666003)(2950100002)(101416001)(53546010)(50986999)(68736007)(76176999)(54356999)(65826007)(5660300001)(8676002)(83506002)(81166006)(105586002)(8936002)(81156014)(106356001)(33646002)(31686004)(53936002)(7736002)(4326008)(305945005)(6246003)(6512007)(189998001)(64126003)(6116002)(65956001)(65806001)(47776003)(6486002)(6506006)(230700001)(229853002)(50466002)(67846002)(2906002)(86362001)(23676003)(31696002)(316002)(58126008)(25786009)(478600001)(97736004)(36756003)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:DM5PR15MB1834;H:dhcp-172-24-229-77.DHCP.thefacebook.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtETTVQUjE1TUIxODM0OzIzOktBdkhMTFgxMFZvUGxaTmtKTm13Qm1ZZ0tz?= =?utf-8?B?WU9oRGh0bUFHajlNUmZONGUwSFRPMi9pQ2JtSGlxdytTZjgxMkxpZ2pPTFRD?= =?utf-8?B?N2hyci9oSGNoY3pvY3E0MjNRYUExdHpiVmVoMlpxZTlIaEU4c2VZbjVzREtX?= =?utf-8?B?bWFRS0FpWlAvSDNMSVlxbFZBY3B3aDRRcWpDY1FjYUc1cUN1MVBmc05vc0w3?= =?utf-8?B?d2x6Ylc4MFVJRXYzZmx5djYwMm1jVXJ0cHUvaWYyZHJFMGM0bis2ZitCTFRv?= =?utf-8?B?RG9JWGRPVWdnYWhabjI5dWpTSnFIZXkwOVhsOW0wNDVsNXh0b2lWUnhVTDdR?= =?utf-8?B?L1VmV2pTczdIK3A3czRPcEVBenp1VkU3REUwUi9DQXhMaDJDQ2RvQ0gxZlBr?= =?utf-8?B?N3ZDOThFMEtGWHY1K1RmdnlMeFJpOHN1K0ZJZkpMTy9SdFh0TnlVNUk4bXpR?= =?utf-8?B?NUcyU0xldDAzYkhDNEhyekUxQWhZMGNyS3R0KzBreGpMOHBjR0xVV0Q1L2lM?= =?utf-8?B?K2JScW84dityZG5YZC9UMjBEak82Nmt6VEtwd3g1b2ZyRW1Vd05OdVN4MnUr?= =?utf-8?B?TEtxMTFsUDBFRkpRSDd1RXp1TjlCcmVDb2UyQzZjeWx6cFAxbzN0cWNTM0JU?= =?utf-8?B?clRCYlRISm1YUTRXS0UxeHV0MVByQmdXMENmcnA0azFCdXl3Z3RRR2poandj?= =?utf-8?B?ZjV6MURwNlVPSHoraEc3R0l0cGtxNEZVeXFVZllPRVJSa1BNNGthUW82ZVZ2?= =?utf-8?B?Uy9jc0JEbUVMVG9GZUJPZkFvSkdlL2QvckYzRTJBb3dlTTFlTkhwM2ZCcTQ2?= =?utf-8?B?YnhXZ3hNT0QrTTNjbEwrTlJ6c3dTa2FYSVR1VjBUbldiRTFXTUlDVHFub2Uz?= =?utf-8?B?akxvaW54WG1aWjduVUZKRXYyc3NTeDhZd2tyb25TYlJ5dGtUY0tXdWJTTWJW?= =?utf-8?B?eE1Ld2kyNVYxOG1SWDcrRWJoY1o2UHNVRFNsNjNVUUU4c3lWQldWQjZtSzI2?= =?utf-8?B?bDF4eGE0MDlVS0JZeHBzZGkybytkSlA1QTRhME8vR29nNGluZnRXWlpHa3NH?= =?utf-8?B?dkVhWXFBQTZBY3ovWStmeXl6dm43azZiSnovRnVCb0VkcG5pRnZ2aUcwUjRh?= =?utf-8?B?YW9hUzVKRXFYU2o3TDM3VWN2OFV0MnFhRm5yT1Jqa0pjczdJTWxnbkt0SXRt?= =?utf-8?B?L2FwcG5zMWM2VDJ0emMweDFBZ3kvVTZQUDRBYkN6cE1tZlB3cEY0eTZ5RE5U?= =?utf-8?B?aENDaUdKZ1pKRnVrZXJ2LzVod0toZm00MkVoNDJOYU1mTEQ2WkJLN0h5c0gx?= =?utf-8?B?VEYwQ3M4MXhCeVM2a0hjL2hnN0NFdmIzNGIvZWU4L2ltTlk2cXNFaUVGKzNz?= =?utf-8?B?eGsyNWNRdmE1eG8wUDhBUW1RdFdINDJQcGEyd1IyTmQrVjA3KzNNOFIrczYw?= =?utf-8?B?SkphUzEvNTVqa2dHRDQ0aGVoRTRZUEZ2MVJvZjkzZXFYTkdwRDZSbTJ4czQ2?= =?utf-8?B?QlFxeUM1Nm0zelErMTgwZ0EzeSt5VE1rdTRLSTQ5WHFWSmNyVUNIQ25nMGZ5?= =?utf-8?B?ZHFZWnI1Z2VaaUpHU2ZTWWgydWRWU3p6QmUwSEZ2ZnRBTHEzOFI5aVlMYmxw?= =?utf-8?B?N3YzSHpoRFRhVWZ3QWRBQ01uQnZyNUtDUHJYR1MxQUc3bmtVK0JqY1JreGNl?= =?utf-8?Q?cmNhQmAzZ4gzxLziCARredvPBdSg1v/1L30JRVg?= X-Microsoft-Exchange-Diagnostics: 1;DM5PR15MB1834;6:wqHamabf5/mUx1g/x6p9/AePEOQL/smMtQHaRGz1PUAHQ3HzZ3uzP8omcmi8kJbpAZ7KhIUbYXvTZ+MdOjcjP7+bJ6UE4JXKEC1T4en0amqZ6GHEAvgiXO4P2K2UnHdCZnEFJdp5DACZbvCL4M+EBZn3Im5GbJ7ETnQVxzuNjZNmIQUFED2cA2iYyYrttcU5anoqMcdkszTxPG/tVy6XVVF/q58AHG6XZ74GzZa1an/sh7K/3wSuFHiZ6gKpnPVD1spLjHmIh8G1uoQeFrdvixzF4X5KRJ6MyImyMezBt3L6+7GPW4TJ+UBsPWozbk9P+GrlyqOR2ZutTqpfxkWJ9jqxZOX8/GbGAQHRAzlGNTs=;5:PMFN/pwkbNz25vlKv3wV9yS84MlL5tcN9bdM38lfgJeef9yqL+KXC/kvInldaSwiDlGvxjhk4ujHP/4CC5IhRxedoTxxmG8pr4oGijRxNoFZM0/DK2LSev5YS/rDpIzxhHdFZ9526QfuffysGCqGP5b4JPBWkzmj0VmGpWV1tXs=;24:jeK8JobgPnOACRC0fp7xRGyrAerC0GFJq2QHUqjZBOz5tT8cK+jGfuOYiFLQrfcOEfSezS06AYd1CeP1XLKPf8otk2RFBHbqKkWv9RK32ZI=;7:nCPhUelTnVKhlEj8PGOymUqDMibi+v4HUOCOoCZPA6a0bWYym3+DG4XQobUvkgyTwLnzwnkAvoZEgZ9nJxV8+WVr3hMDslSf6VatwrppEpo56qokB73Zedy7VXNrI3/09dlQzklh6RrqkHvSGPpak2hrWHZjwPrH2w+3r8hNfdDB0dFjEeYV6X3LICFelSHZdRBgEkFzHH5e15n9+tdVm+1PzEC7UU+wcY5tRKkyBYSG4qhKLdIFG+HQ3Z1z9xb6 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DM5PR15MB1834;20:L5B6EhOHSuaS4UZWDoixB70FhfcSRDK3n+X7gjTjchDumVjNtn5Eelj8IjXgqPSQwdTy3oyQzwYdUP4RN2nHJLFxlnYGOQ2gLyKg3o3zUsaHfg5CEi0oUVaD+jkhOHw33fdLPhZ0DzwooORyWun/kLpTcy+0JknkehsyYHFKSLk= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Nov 2017 20:32:22.5274 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9736b1e5-b118-45a1-f094-08d52ad5a585 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8ae927fe-1255-47a7-a2af-5f3a069daaa2 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR15MB1834 X-OriginatorOrg: fb.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-11-13_11:,, 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/13/17 4:59 AM, Oleg Nesterov wrote: > The patch looks good to me, but I have a question because I know nothing > about insn encoding, > > On 11/10, Yonghong Song wrote: >> >> +static int push_setup_xol_ops(struct arch_uprobe *auprobe, struct insn *insn) >> +{ >> + u8 opc1 = OPCODE1(insn), reg_offset = 0; >> + >> + if (opc1 < 0x50 || opc1 > 0x57) >> + return -ENOSYS; >> + >> + if (insn->length > 2) >> + return -ENOSYS; >> + if (insn->length == 2) { >> + /* only support rex_prefix 0x41 (x64 only) */ >> +#ifdef CONFIG_X86_64 >> + if (insn->rex_prefix.nbytes != 1 || >> + insn->rex_prefix.bytes[0] != 0x41) >> + return -ENOSYS; >> + >> + auprobe->push.ilen = 2; > > and the "else" branch does > > auprobe->push.ilen = 1; > > you could add > auprobe->push.ilen = insn->length; > > at the end of push_setup_xol_ops() instead, but this is minor/cosmetic, Will make this change in the next revision. > > >> + switch (opc1) { >> + case 0x50: >> + reg_offset = offsetof(struct pt_regs, r8); >> + break; >> + case 0x51: >> + reg_offset = offsetof(struct pt_regs, r9); >> + break; >> + case 0x52: >> + reg_offset = offsetof(struct pt_regs, r10); >> + break; >> + case 0x53: >> + reg_offset = offsetof(struct pt_regs, r11); >> + break; >> + case 0x54: >> + reg_offset = offsetof(struct pt_regs, r12); >> + break; >> + case 0x55: >> + reg_offset = offsetof(struct pt_regs, r13); >> + break; >> + case 0x56: >> + reg_offset = offsetof(struct pt_regs, r14); >> + break; >> + case 0x57: >> + reg_offset = offsetof(struct pt_regs, r15); >> + break; >> + } >> +#else >> + return -ENOSYS; >> +#endif > > OK, but shouldn't we also return ENOSYS if CONFIG_X86_64=y but the probed task is 32bit? Just tested with a 32bit app on x86 box and segfaults. Yes, we would need to return ENOSYS if the app is 32bit on 64bit system. I may not be worthwhile to emulate this uncommon case. I will use mmap_is_ia32 or a variant to test whether the app is 32bit or not. Please let me know whether this is correct approach or not. > > Or in this case uprobe_init_insn(x86_64 => false) should fail and push_setup_xol_ops() > won't be called? > > Oleg. >