From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1161153AbcHaRWl (ORCPT ); Wed, 31 Aug 2016 13:22:41 -0400 Received: from mail-ve1eur01on0101.outbound.protection.outlook.com ([104.47.1.101]:23072 "EHLO EUR01-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S935097AbcHaRWk (ORCPT ); Wed, 31 Aug 2016 13:22:40 -0400 X-Greylist: delayed 5778 seconds by postgrey-1.27 at vger.kernel.org; Wed, 31 Aug 2016 13:22:39 EDT Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=dsafonov@virtuozzo.com; Subject: Re: [PATCHv3 3/6] x86/arch_prctl/vdso: add ARCH_MAP_VDSO_* To: Andy Lutomirski References: <20160826171317.3944-1-dsafonov@virtuozzo.com> <20160826171317.3944-4-dsafonov@virtuozzo.com> CC: "linux-kernel@vger.kernel.org" , "Dmitry Safonov" <0x7f454c46@gmail.com>, Andrew Lutomirski , "Oleg Nesterov" , Thomas Gleixner , "H. Peter Anvin" , Ingo Molnar , "linux-mm@kvack.org" , X86 ML , Cyrill Gorcunov , Pavel Emelyanov From: Dmitry Safonov Message-ID: Date: Wed, 31 Aug 2016 18:46:24 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.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: VI1PR06CA0004.eurprd06.prod.outlook.com (10.162.116.142) To HE1PR0801MB1739.eurprd08.prod.outlook.com (10.168.149.151) X-MS-Office365-Filtering-Correlation-Id: 5708a1fa-45ff-4bea-6327-08d3d1b64419 X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1739;2:qF2kfuNjVbQJDdXx4Si8ULsxS/5zxM+ATVT/49MJmvW0NHB69+O/8ZNu4WHmch8T1KX69ionKNjc4KvO4dgKbDkM72a804iYb/1B0xGxTy5/77B12dQiS+JaUG/f7+m8pIgMVIun8qlGQXoBjA5GXlN2v7efBXHvTPyB8eVhD4FoU5R0kIT8kAg4kpsbkTF2;3:46iQwLqMkndZYSxDN0QDGu/FPc6D1icLvuAd5lpriVuLjUthMp/z2rv2vNl5ti7HyepLGVYVikQoY3cokr1auV7QtMulQ16A0Avp+/nFv/DcRJPv3y8KL0re9SEMaRfh;25:9RLWVL18xYnKwwnTgXXrvnXWENmfdV5RtrXQJ5MepiSKJISFKHVQZqbQwfdzZXEx1FM+5LMSgCBaMkKbiS/K2mv79bx4WBJFPOBoYJaI0tZ9FIMsr/5w72xy9W86DexlS0wRk2ekRAwnKsde4BT7SccxIOmS4LK2UBF4770NGQFI0Y38eQckoTMnLeTQSl7eqydb7et+8te02KzwjHPLJqGcoMLT1bJKfBwB9QuvmjOs2LypvZuMD4eAPWAq2yQW/dk9ayOhZ8xjYqQAYY2hDjxT4KSSyAkt5pHpmrclif5kUg4WUr63b45Ip5ZZZO1NCRcVMmavNfJ+G6mt7JQAUPSTBdJPQKRlkrAHmX9IuHXBDT+XbRA5krsuEm0jE6KckXdwjGXgBK7nSQKMLDkrY0DdKqheAXF3aJPAEDYXl2Y= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0801MB1739; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1739;31:4xY6uHipsFt6brRaK+3OyYk/R3oYChQSS+Oj2Qi0Nxf7KoTODa8cdTv3cQ/TOlYYJPyDS9kQDhdGzWruSxvgDVlsnmZKNjK1a/UeZs42V/82wRNHGipcLN75PYqROjxjAORHP2e1Fy7VU/7qJBHYEEcxiKjZ6vzkwfxEy6lpmNIm9gnmbog9kdOqtk/AyXnBt/GFBfW5PQ3OZ6pO8KnNMrQCtZ8Rzc3Ng2p9BlcKdf8=;4:cfK8RQLvaM50i1043IuGIUBWk0bWIHrraC+b1KeBZk0auOVQP2PXSzEex7euerQ7pfIT3AN0Jfvq7tKPQvfzvnUt6FRewLLtOWvzzpkTzc+8BCkC1M7zvJav5ttjOhKuBB5rvrenKmTdSWJVnrPiMho07xA/ByuL2uOMu4iD/CMVIltnfuPcw5EcqiORep54eKxuZM3AY1flXqeJrNATLLA9xNNA3E14lXHO2rIN5YjC2iyQYY2GobiXZRJjeK1GQipRh1JAG/uPPiEAI0Qe01KzogVkwhotP8i6Tu4V2aXpMA4XTwZjBJ1MemHLOY0Prt0yC+ot5a2oNcMMIqjrbOgwfB8vyU5QyWuU6weV4oKzuO1HHYxmdcfUvheRHJXTm4F1ZPxX+8fvF5JpFswpe15w1VdfNLo8E/7HQwBUUa4= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6043046)(6042046);SRVR:HE1PR0801MB1739;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0801MB1739; X-Forefront-PRVS: 00514A2FE6 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(7916002)(199003)(377454003)(189002)(24454002)(93886004)(586003)(83506001)(77096005)(31686004)(5660300001)(50466002)(101416001)(42186005)(4326007)(66066001)(36756003)(86362001)(31696002)(65956001)(6116002)(3846002)(76176999)(2950100001)(54356999)(107886002)(4001430100002)(23676002)(64126003)(110136002)(33646002)(19580395003)(65826007)(230700001)(105586002)(68736007)(189998001)(50986999)(65806001)(106356001)(47776003)(97736004)(4001350100001)(7846002)(81156014)(2906002)(8676002)(81166006)(7736002)(305945005)(92566002)(7416002)(19580405001);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0801MB1739;H:[10.30.26.154];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtIRTFQUjA4MDFNQjE3Mzk7MjM6Y2tHUVlZbHhUQ1lMcFhySFRERkp1Mkgy?= =?utf-8?B?Q2ZJZm4xZDR6UTRydXJGY1BpOGxUQ29QZnEzSXZFS3hPTGpOdW8rM1o2OGtY?= =?utf-8?B?MVNnZjFnT0ZUeVlnTFQ1SmhSM3BkY3phbkllVWp4MmlGRnAzQVJXOFZQdUNT?= =?utf-8?B?U0dla0xSRWhlcFN3NVNKckhtVnVpSUtvMXFQM0ZJZWN1ek41NWVLallQc0Fp?= =?utf-8?B?bm1LYXVSSjJtMFRiWFNNRnZoVU5xcGlzZlNvYWtuZU1GR3E0UGhBelNnTWs3?= =?utf-8?B?N1JMbDVuTExTeVNPT3R2ZFA1N0p6U1NMZEw4VHpsbXIxZjRFYTVSZmFaTEV0?= =?utf-8?B?aThyZ3U4RG53Y21CblVHUUZsb1pMT3A0TGRPb2VEMFQrek92RWgvNElieXpv?= =?utf-8?B?L1ovakg5MEN6R1JhSW96REJyMVAybVViMzMwbjQ5anYyR29FcVF4RnZwTVBs?= =?utf-8?B?Zy80UTVVWjZoWXQvQ0FHTTdlay9CMGs4M3hkMWwwekRaOUdJZ3NDOG1qZEkz?= =?utf-8?B?OGhNWG1keDJYRjh5WUozam9NL1B4c3hTd3p6OUQzSlc5d3dIYlN5WHVDcmNR?= =?utf-8?B?Z3Nibm5jWCt5bFhxZEZibisvQzlzZm9ZSHdHMEZhdDB6VWhKUHFZRE4zRDF2?= =?utf-8?B?bHR1K0FHNFN4d0NLWWJhQWFiSnZ0S0FZa1Z3cC9wcVFZUm0ySWRTRmovZVRR?= =?utf-8?B?ZVp4ZGpFSFhnajNXRVdCamh3djNEUW9jSFczMGN3N3IvTzI3azlmd3RTdW16?= =?utf-8?B?dlR4TzJrWkE1NjIrWW5DVkFDNDJGVm5CRlE5VWthNndNYU9URE5jUVJwSHpW?= =?utf-8?B?ekZJbjdQclpQOVJZSXBZS2FYbnRzRlliVkE5aXJocE5zWGhVQUtjSDE3M29X?= =?utf-8?B?ekJTT0JqQmN6SXFLeVptUytuSWNaUHV2eDhJWkp3WmZZQzRhODlVNmVpWFVK?= =?utf-8?B?MzdsNHJQRGpCc2tId1NCajVuU3p3WDVzTTFKVWpaKzdua3FoRzd3MHlpZDV5?= =?utf-8?B?bVFOQXZJZEFZMjl3b09Bc0h0Z25lQWxvMVZWUUtoMWFPS3J1bjdsRlQxOFQ5?= =?utf-8?B?ODl6blB2TVZSVlpVZHJTMGxKS0Y5QmFoemFsNVNQMnN3cW1FZTRocEtaVlZp?= =?utf-8?B?ODA4bC9mMmt0ZlNzS2o2aFVPVjVpeHhWcU5zT05pajVHWjgzckQ1MVNuTWZI?= =?utf-8?B?d25IMmNlNXJ0d0tFMEQ0STc1VGNxLzZadzBORk1BYTBqeW5aRmNKeHk5cG5O?= =?utf-8?B?RHFVcGZhZi83a1dBS0ZtT2hDQ0RUNVJETUp5aWpBVVVkN1NOdXliRDd5MGxh?= =?utf-8?B?V3QrclRUNG8vaVNLb3dTdXRNay84SldpenJjYXlJY3hBNUlGTExyUC9QRDRC?= =?utf-8?B?emRIMFRGVTlzVkgwcDY1RjFJOGNodFVzeEExOC9EUTcybk5hUHlWYk82Y1RV?= =?utf-8?B?dDJaTisxdFczT2ZWaXd4QkVsdy9ocmRRdXkxNzhqN1RCQTNmei8xVTB3VzAw?= =?utf-8?B?dk4zYWpQWkNaWUs1WHNLOTk4S1FmNGloeUhpSW1XN0QwdEJNbzMzaUJqYlhC?= =?utf-8?B?MUNDWS82ZkswbVVBalE1UzI2Um5GN0xTSkd2TmZlamdJRlUxUjBzZkZJcDRj?= =?utf-8?B?OWFMRzdRZXBIWTRoanR3Sy9NMFpISXRObHIyK3BRR3p1dm43MURUaFo2Wmx4?= =?utf-8?B?TTNsdlE5RlFnSXkyeW51SW10UG9lZktQRUR2NSs2Q0xFY1c3N0ZUODMxY1JJ?= =?utf-8?B?eXBud0tjTUloVktDZ0FpanREM1RNVFhQRjJ3bi9xa0l4TkxCV2NUU0JtTzVQ?= =?utf-8?B?VXB1bk5QMkJEVTNlczRrZDgrOFlMRXRHdzdoaTJwY0ZnZVZVekUrU3dNVXpE?= =?utf-8?Q?Pj1oSn1lk0y+8=3D?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1739;6:RJVDpWwlbh0wdmA+cthJLkx23+60pGPnuAOJr23y+PaEfog49hePvFcrLeLQxLKLAo94PjwWUtnaN3dUA7N7YoCKhawZRcgzBjL/1Qpa/OJjQm9Xgmc7fD1hN65kWcPbezJ/xKET7CG50I15ZPPbiTd7F+yilM/kz/62szIE7R1jtVvgV9tgCskZy5MXKHvJl764mHR/J6/6qzFBfmyGRkvtsYAQjyo9UrDgim63EkGYWJKuor1czoby0FqpBA8m2q9armapTY3RHcRTEIsywqcQqlN/Caa1Q7dXpLBfGMXft0FEbO93OvCF+avgDvuT;5:sNAud5+dC7P5WAI/gtVh5h7fRw++a7FChjmWvutKPqIK4BvWytMZ+h8QG52cWWqI0pZVLdGq5qsw1wqDQMou0oYv6onuYsjY88LGGt1I270yp30DTl9Bdo/PX9s5LkbV6EwgqOLqrZivIyPPwtLKAw==;24:hPOPg9TN1jtTSFe5Fw4uaFOmvLWX+c30xv77WGQHNS3DWP+WbvklebrRN2CHYxgQrZPCKPxOJ1LuBYSYG7Pb81WIhauRKl116uANSLsyk0s=;7:oEb9kHVZoMDH56S0lmwW+22dH0LAlT2SDOQfzmjF9lvRJ/CNFqiZecifrctQOzDyMVIUCKJuVyPqOwYr/sCIkkxF+1aM++Sk9d4PWyKnqLBwbW1EyoEzVSl94m4XFsljFXNlE5Z8nWydRrRZtOlpwkREMCLGLYaM1apr2h+cu+O2Cyxq//6Io7w6SJoUC09iL4g7gbmgSxMiZDy31+SvEyQOipgaPThiyigo1lEr4/zLmefIoEpHfL3e9ZG5eTig SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1739;20:WnW3lhVPRQqfBlqdFj9IT+tfn07Wl7h1U7G1WkCV4+Rkc3//rVxdQu1aTI4/uK7wsapOfqFsUn9ZOaai6UoLelQy40hlnNFXxTo+/lpgacAcO8Q4FW+PdIWXy0STj80q4NudNxKhjDpdO9e1ezOorVArIInPWHv4h/N0yhhkj+o= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Aug 2016 15:48:33.0946 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1739 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 08/31/2016 06:42 PM, Andy Lutomirski wrote: > On Wed, Aug 31, 2016 at 8:30 AM, Dmitry Safonov wrote: >> On 08/31/2016 06:00 PM, Andy Lutomirski wrote: >>> >>> On Fri, Aug 26, 2016 at 10:13 AM, Dmitry Safonov >>> wrote: >>>> >>>> Add API to change vdso blob type with arch_prctl. >>>> As this is usefull only by needs of CRIU, expose >>>> this interface under CONFIG_CHECKPOINT_RESTORE. >>>> >>>> Cc: Andy Lutomirski >>>> Cc: Oleg Nesterov >>>> Cc: Thomas Gleixner >>>> Cc: "H. Peter Anvin" >>>> Cc: Ingo Molnar >>>> Cc: linux-mm@kvack.org >>>> Cc: x86@kernel.org >>>> Cc: Cyrill Gorcunov >>>> Cc: Pavel Emelyanov >>>> Signed-off-by: Dmitry Safonov >>>> --- >>>> arch/x86/entry/vdso/vma.c | 45 >>>> ++++++++++++++++++++++++++++++--------- >>>> arch/x86/include/asm/vdso.h | 2 ++ >>>> arch/x86/include/uapi/asm/prctl.h | 6 ++++++ >>>> arch/x86/kernel/process_64.c | 25 ++++++++++++++++++++++ >>>> 4 files changed, 68 insertions(+), 10 deletions(-) >>>> >>>> diff --git a/arch/x86/entry/vdso/vma.c b/arch/x86/entry/vdso/vma.c >>>> index 5bcb25a9e573..dad2b2d8ff03 100644 >>>> --- a/arch/x86/entry/vdso/vma.c >>>> +++ b/arch/x86/entry/vdso/vma.c >>>> @@ -176,6 +176,16 @@ static int vvar_fault(const struct >>>> vm_special_mapping *sm, >>>> return VM_FAULT_SIGBUS; >>>> } >>>> >>>> +static const struct vm_special_mapping vdso_mapping = { >>>> + .name = "[vdso]", >>>> + .fault = vdso_fault, >>>> + .mremap = vdso_mremap, >>>> +}; >>>> +static const struct vm_special_mapping vvar_mapping = { >>>> + .name = "[vvar]", >>>> + .fault = vvar_fault, >>>> +}; >>>> + >>>> /* >>>> * Add vdso and vvar mappings to current process. >>>> * @image - blob to map >>>> @@ -188,16 +198,6 @@ static int map_vdso(const struct vdso_image *image, >>>> unsigned long addr) >>>> unsigned long text_start; >>>> int ret = 0; >>>> >>>> - static const struct vm_special_mapping vdso_mapping = { >>>> - .name = "[vdso]", >>>> - .fault = vdso_fault, >>>> - .mremap = vdso_mremap, >>>> - }; >>>> - static const struct vm_special_mapping vvar_mapping = { >>>> - .name = "[vvar]", >>>> - .fault = vvar_fault, >>>> - }; >>>> - >>>> if (down_write_killable(&mm->mmap_sem)) >>>> return -EINTR; >>>> >>>> @@ -256,6 +256,31 @@ static int map_vdso_randomized(const struct >>>> vdso_image *image) >>>> return map_vdso(image, addr); >>>> } >>>> >>>> +int map_vdso_once(const struct vdso_image *image, unsigned long addr) >>>> +{ >>>> + struct mm_struct *mm = current->mm; >>>> + struct vm_area_struct *vma; >>>> + >>>> + down_write(&mm->mmap_sem); >>>> + /* >>>> + * Check if we have already mapped vdso blob - fail to prevent >>>> + * abusing from userspace install_speciall_mapping, which may >>>> + * not do accounting and rlimit right. >>>> + * We could search vma near context.vdso, but it's a slowpath, >>>> + * so let's explicitely check all VMAs to be completely sure. >>>> + */ >>>> + for (vma = mm->mmap; vma; vma = vma->vm_next) { >>>> + if (vma->vm_private_data == &vdso_mapping || >>>> + vma->vm_private_data == &vvar_mapping) { >>> >>> >>> Should probably also check that vm_ops == &special_mapping_vmops, >>> which means that maybe there should be a: >>> >>> static inline bool vma_is_special_mapping(const struct vm_area_struct >>> *vma, const struct vm_special_mapping &sm); >> >> >> Oh, I remember why I didn't do it also (except header changes): >> uprobes uses &special_mapping_vmops in inserted XOL area. >> > > That's fine. I think you should check *both* vm_ops and > vm_private_data to avoid (unlikely) confusion with some other VMA. Oh, I thought you suggest to check either of them. *Both* makes sence, since AFAIU, vm_private_data may be uninitialized on other VMAs, will do. -- Dmitry