From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1030228AbcHaQHh (ORCPT ); Wed, 31 Aug 2016 12:07:37 -0400 Received: from mail-ve1eur01on0119.outbound.protection.outlook.com ([104.47.1.119]:58347 "EHLO EUR01-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S933887AbcHaQHf (ORCPT ); Wed, 31 Aug 2016 12:07:35 -0400 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:30:47 +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: HE1PR01CA0043.eurprd01.prod.exchangelabs.com (10.165.170.139) To AM5PR0801MB1730.eurprd08.prod.outlook.com (10.169.247.8) X-MS-Office365-Filtering-Correlation-Id: d69e529e-4767-4eef-d190-08d3d1b41518 X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1730;2:Ee0WUwhi0F4DRtV60lsL9Rds9XFe6Seb/mbBEZcCz+qcMOZaTXyaZnpYeJMma1VC2o/GiLHYJVmwhQVxHb/73N/UWqwrMC8fMKfjubswrp3T0yBqoqpmkNsGWJ0IRYcF5crUhdiw1fIdAhQHNANMvOqJEoF1i6N84OJYK14rz3eM6GPQDfYpZoSKY4Ktcfuk;3:73eZQkDltNIffvPSGNWXbCBJ3ez9FXuJ+5qnrS5wpBH4b+jfISvP9ZIJPxnohkyUy5ffOjyqNVVRCjbq+uIybK/vItsR8xFbv2N/z21FPIVjdw7ah2xJd5q3tbZhIG4S;25:YVhWPsRe9C1QBpkudjwilxN4CRdTVb2tG4Sg/X8unFyywZCOa1oEjVOcplIjxrBpX+K+M/uFptEORS8ZYU8BmZ1pNJ8PwcFARNurkuqipzyTO+e003nId5UZp7EapXAgdzB696L4515VsZWK6BtbYbz7ijuRlFFpBtoepGBdEc7BfckueCSN4Rp+RyOkV6MiM1NM8z7FDhW0u8zEWvqFSPaIvAFGp1H5AaGEJ9cm3lsRe2yACz28I0HutwiNLnboy4DnSTpBCPjF/Kvl2g+hndtKHyFGQvq39mcSpbcGP8ZaZzi8ltwf6o8EGDD3AePJDBKaTJJRwkgpiCVQ93FP6kL/uUZ2bgJQGPJ1fSTXdkibnL3bF4yJ8EJL/l59nsDY+sgv2ET04j9iBAG5cEX5g1ONdehcFr2dF1/lRSVaA1k= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:AM5PR0801MB1730; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1730;31:IRsjnj2zW6xcxAoKaMC9pv2qfT3RXzzXJE/v0r6MUfNtbXsm6EpfPsATsSsMMaCaONqagJmppPdwThVH9xd7zGENnrFkwqYUtvqwqV39iCbkqkABu1NneWfQRYv+3BFZkOT6sx/78tQZQBuTU0sLo6nPGYnQB7Kk7JBBUdyU/LCjlqdpKTE0e8Zb0tXnW/aACg1fVIjytrJ90PmV/jHRcatEcKfL2G4zud/YWc7dCSo=;4:V2E/9XS3mVbwCHvLnwVCvi4qp62kCfNojQ0EeWGoVKd+bM3sVtwsTt6FB2cmSffxP05vWogtN8UfqVuayzwGpAV/jzDqXnQJinzRG44l4mCHO6FQgWpAsT8GUXzdRdwGcH9G9ZG3s7VoXE7lneeLJbKB+8n5S8QXWGDyfE/TzjuH3NyPObgyDdMI0eTBvpEnaih7H6L+jD2RWe4CmtD8gqlIb5330jRDQqCf80rVRORRGS7j065W4xhaOlmbwuqlFTVtOmKDLS5t0VsjqT29Ns4PzPTheCV4uVJVYmjvocPSS1w55MNfzr2WAYf4muXPErxofsmm75xD4uUnloJp9J261UEdINwrXP/JSfGeNhs+qHBUHagkv7nIZhc9Zle5N9FqyodeGM2dz1FwLSRDE7RdgYo+A5F+OQxYlt4KtBs= 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)(10201501046)(3002001)(6043046)(6042046);SRVR:AM5PR0801MB1730;BCL:0;PCL:0;RULEID:;SRVR:AM5PR0801MB1730; X-Forefront-PRVS: 00514A2FE6 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6049001)(6009001)(7916002)(189002)(377454003)(199003)(24454002)(6116002)(65806001)(66066001)(65956001)(47776003)(23676002)(305945005)(81166006)(81156014)(7846002)(7736002)(586003)(19580405001)(19580395003)(8676002)(5660300001)(106356001)(65826007)(4326007)(3846002)(2906002)(7416002)(105586002)(110136002)(42186005)(97736004)(83506001)(101416001)(189998001)(4001350100001)(50466002)(31686004)(76176999)(54356999)(33646002)(4001430100002)(50986999)(68736007)(230700001)(77096005)(86362001)(92566002)(2950100001)(36756003)(64126003)(31696002)(107886002);DIR:OUT;SFP:1102;SCL:1;SRVR:AM5PR0801MB1730;H:[10.30.26.154];FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtBTTVQUjA4MDFNQjE3MzA7MjM6SSs4QVNLckp2SDIxR1hpTmVDQzl0UEtp?= =?utf-8?B?T3ZGMHltTnh0SkRadnh2WDBKM0JwdS9SZkNEZSs3WVU0Y1ZoaGd2ci9ySXlv?= =?utf-8?B?OTlWNUNzU1lPcFhXZnRPYW51OUtPRzN6RDBhOGhtVGh1WS9hVHVtZlNGQThC?= =?utf-8?B?WndkemlFQ3F4SUVBMG9CY2dvaVV5RnhqUVpQR01nQjNmd3hvcGZRTGxjcmVL?= =?utf-8?B?YnBJTDEyd1MwRFhuT3loVDQ0d1MwcVNmNFdrOStiY3oyUjc3SlBzZU9zS240?= =?utf-8?B?U0VES3dReUxhc1g1QjZNMm5GZG8yN2pSRmF1M0dHYVRHU0xIeEpKMkpZVTd1?= =?utf-8?B?enVXWHF5eFhHSWNvQzFMVjVWTTVaRktzRFhVaXVDd1RlbmRlNTA1K29qSkor?= =?utf-8?B?c1dFSTNjZ3M2bmdpcEtwbys3RDFpandVZ0xNZEJ4RHowWlU0NUtxUkFFUnNo?= =?utf-8?B?MlkxUS9oaWFrc3gyMjNHNlhIY1krQ3BOQUVBeVVCNllWczNzSGV0cGQ3TGtE?= =?utf-8?B?OTdBd1NOTHl6V0pLRGNOUmw3cUtiNENmYVZka09DMWlhSnhoNVk5YmV6TlhI?= =?utf-8?B?L1dWYTdraHd1eGhDTDJuWk1VRGJwMzBEOXIxZzMwSm5PT2o5L1lkRndKZU8v?= =?utf-8?B?dCtpRWE1NWdTQTVxQmRXNlptOXJSSXhwZ0pXNStWZW92TENYSy9ZSmczWWpj?= =?utf-8?B?L0V3MHhPcU4wMWpUUkNyMmpMVGRWUUhnS1lSc1d4NnRkTCtGbTlaZnRkTFJ6?= =?utf-8?B?MFpNWkdhUGxQRUR0TFZESy9xUGw2Uno2N3BtVkM1R0pCZEtwbGZFVThaMENP?= =?utf-8?B?Y1l5YVV4bzVkZzdYYWhFYlBBWXhOb1FjdERuWWErY0h0cnZKUkpiVWJvdHYr?= =?utf-8?B?NS84VnpENXZBV1NBNkMvTGpzWWNIck5DMFUzMDZZUFBDdzJ6YitweFRvS2pR?= =?utf-8?B?OWRjQ3FRcjhvNzYvWm5TYmRZOWl5N0wrRUpQU0xFaE4xc2pTaVFOaVl2dnJL?= =?utf-8?B?UWtpNlh5WXBqRm44T09jNjVsenhob3dISjg2R2RWdHVhQUwySzJobDJZWmNq?= =?utf-8?B?TWpEN3pNU3dzU0MvbzZIc0ZmY0szL01oQU9GelUva05rdlJIemZQc2FDdGR3?= =?utf-8?B?aFRmYTRxTC92cmVQbTN2Q0NMSWQ2QUJWN2ZGUG9CZHdJTjhvRkk5UVR1cUYw?= =?utf-8?B?LzZXWmdHaUMrVnRZOVVtWHZZQ3ZKYjdveEllQThYL2hwdUJtUUh3Z0t5Y0ZC?= =?utf-8?B?ZmJKNGxMOCtEUklkZERwQm82bnFJc0pXREh5VndNVlpCaU55TXNWTGFNeFQy?= =?utf-8?B?SEViVno0VXFaR3ltNjZEOXUwdUU4Sm9nVDA4bmZYbWxPZVI1SzZGd29VNEdM?= =?utf-8?B?NlMzRUZFS09qWk05L3J5alpTUllsNm95OTJsSFE5Y2g0ZWg5SnBuK0dwa0cz?= =?utf-8?B?UEZTanVpNEgra2NWUFdCKzAzczlxaGVFQ1FvS3FlRHdOeGxhMCtnWThnUjZv?= =?utf-8?B?ZVpzT1liTHRXODkwVHlkOVVEYnJTRXFVSFdUU3NIdHZiaEgvM0JTUUt3VWtp?= =?utf-8?B?V3pwclY5MmsveUY3cWhVamErT0xVRXNuWHRSSVhLR3grQ1FOZnlHbm43UGF3?= =?utf-8?B?SE41L09FYlk0YUVtclpyeWpVMkN6cXJLYnJjZnJxTExGUnQwMUdNeVIyM0Fu?= =?utf-8?B?MWtsY3pZaXA0dWdJZDVLelF5bzk3ZE5HYWpwRnFFSTduTUFLdG9PcW1KVkpJ?= =?utf-8?B?clhCS1FUOHdzTy8yZ0ZnMGVUZGU4M1Bua29EY2p1Y0hPUG9oUHF3ZFcvang5?= =?utf-8?B?cmswRFRUdlM0ZmVTM001dU1oVUxvZURHSW9YNGdGQk9hblJjZz09?= X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1730;6:/MY8rf85P9Noi/K7cF5Jz0FgKSv81GKtnd7PTHs59IzU4hllyDL6JtjEQS8/1a+DgYyzjK85wH/0cDsIiZvqXKZUjTVDHztQQxZIRes7Dd128hYEo5j7WJs5WUfeNbhYcMR4bYg4t3tsz8xZCjfipa1PMp/dTMC0hRZ7FFBlJF+/ldzPoN4rhZqUn9K/o/b9GgCTaqPDyGIILGirqhlRi8cSy49udE79rVdGL8VXTjFKn82kyeCjdN3fVC9AQRC8Hzc2j5qgZCR50tp9t1SUCuKeIfM/4/46GMcPyzOD7u6hgXM4A78FfXbJnUTs/i3A;5:hb2+3nzgR+ceelJDKmhRorgkQ25Dbe88IVOvCBG/yq3eua8RKhtqePcAr4ptYbGlnkLnh8r30PFEM3qy7T6KYGZzwLeyMkhXSofuox0d4PulrouHCNJxNcaa4ZMLSWOxQf5/iMFLT7+aJOB7pPpa3Q==;24:+9RkBWkh41JbdDCQhcK+I/LX9fsevs5yFypHCfTA24D4f3FduIx4TAfljXxUDZKTOnE/HzGVuZjI85BIlIJ1RL6cZHY5Kot6kZ7I21Rd1YU=;7:Jqd5jJmliLg1fjlmOZWlxxJL98YXLro7tAA6xgZJ3Qq0pFUR7qX/ayg2OyJyIyInd1d0LP5l0XyrjbuRScjBchf1dcCTvyEN7bLtfxNtNpBWmDWDRsRFTr0q3LuX+HiiLhG5b8wzlbR1yhpFwutpqqnMLGq7XROxzQnRwaPllYQQxSu+rKbuK5AGnIVDN3y3V5Iu6VtWKvHJusjd0mmtBjMK6nr+0Q/FLsv0rVrQNng8Ptqk8zTUh1jx1RNj7hbH SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1730;20:+XcF+A5g+ESmYTGtWjN/d91qiS7QPfHdl4pn8F6dsy/ObxpmtoqhSaw7xgHyY+rCbsLD6PvXO7q+HpVRuuDmNhyk7RYFVjaPaM+1QmTzMKR1jCb5D3on9OMP3V82YmLuJzEx9q2FKnjZkUgDJIioN/WtImjbRqwwkQ79gdNI5oQ= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Aug 2016 15:32:55.0393 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB1730 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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. -- Dmitry