From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933186AbcHaWqk (ORCPT ); Wed, 31 Aug 2016 18:46:40 -0400 Received: from mail-db5eur01on0090.outbound.protection.outlook.com ([104.47.2.90]:52672 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753015AbcHaWqi (ORCPT ); Wed, 31 Aug 2016 18:46:38 -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:09:52 +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: DB5PR10CA0031.EURPRD10.PROD.OUTLOOK.COM (10.165.4.169) To HE1PR0801MB1737.eurprd08.prod.outlook.com (10.168.149.149) X-MS-Office365-Filtering-Correlation-Id: b28618e6-8dcf-4f77-a323-08d3d1b12832 X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1737;2:ZUiTgLGCT5zZVPiv/c8xqcgYCjPe+eqlGDJvNglgCF+cH2T8VJiN9G1+Yz7q+9/IJTJ7kyMTARCcnAaBWf2XOdzSlwtYCOX4C0dHbMTmAUeqFHpV3YvprQB3ilwUstKa354judtEo9n5NMcnHfziix3e8dh3HgAzdaV1uA9JvEmddPZpOOD2DK/kJmgRvvSP;3:3OL/gfqct3twN6poKmFFWxhIyQLWBO6Y9P/O0BM+ISprmLXDcOUQ2zqS+EHO6RMYsrQu7h27X5No1SI8AhFUvV8U30NjBzG7eghUlqYpfycFhuQDTDoIijrhvIst4MmV X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0801MB1737; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1737;25:FOf31lfbzmVKiWTV3k6Y2KjmpnLB2WI7sKujMuohmKJLBW4ApvE65JJmff9vzTxu2+GhyPoKNdpju5Myn/JXYUlld8nWCDDBcWRPq7R7jShv8EcoLRnCDA+aCuaStiWrW5mCcTmIzlcI53G8bhT8XLgAtUZboqz+os1cIglUApm5294B/FnYf+4bhm+9bBoSQFWzYWeuBGtoe4ru5lOS7veRa5EnsWANu0wgQNht/DiqKY0QPUF8xBZiDecz7wI31eAxx7xNLqUo8Sjsxb3E6WV39XG7aDw9cp7GLe5Od7Qgw6DgNTixRC7ph7ZZ79PaTv4kflUcLAxqCskxmUXqdeLdWjW2JvQ7qjVYS6xWfMZkK4vzy4qoA19f3Aflk+ePB472ik0LRUDydkVS3ffgWQlaWPBDtrV3NaPTBWZXgZq4qXJk2r6E3h6iyzf+9DE3lT7JauD/1k4iCbrMuOqTua2gR5As0remdHCKoaAuh31D+0jRXW7IQbIaudQn0TH9T6UxVkLYxw14N+xX2wnsBMNEZtNHfZ5wFa4eev+u+eSD6yduDeAr56mZHPhDgID1qYRa3lWTSFCmHXULkceJYYmvImb5cW40IGOh2xonsKnQxMqfILxiQQWjHr83Q1X/d8eWt1m6NfS/t13DE3RBVuQgMxj8TAV/ozLNbyRTloZ4LBcuORkXspkv7JRVfcIN5/FasWozuIyTUIYTCw+YKw==;31:P17CnCBHfZkObQBOi1h8dwG8u7ghxHkXWgo6u+rylGyBZQYty0RBspBjM0CD+I/SZ95h0k0fUwOBCkufLo+62WsRT5xxZGD+MJdoykQZ5zAGf/AMd/cQoD9IJMJLXoiCfww5CONg1tjJl1tbf4r+/zH12c/eJtqZwP+ZaZNHubdqIsG+2p/CDNS0LfiuZgGPgHzO+LO/o8v8yHlYvQ6o7vz07aH8N3muvt8k3xvCGow= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6043046)(6042046);SRVR:HE1PR0801MB1737;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0801MB1737; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1737;4:foZr5M97CZqYzQItFBC6mYT++iBvMyN0JlAka5u6t/N5bp1xE2WZNs3aVlSvxurRWEywgAMzUjs7f+u+p6BjSnhynrDC7rijCQPpa6UgFZhk+WkagHhSZ/SHR8NzLGUPrzgS+TNfMUPSA+Ggu7pdfaT62Fx0bI5i9G4QIRbAcIuoyoW97ewVWDsy/xgnbniB+s+pZLl/7Tq6TQyzltcZk1kf1GDP6iDAMMEUtA4tmEZn8pnMmmIv/ZS2/NZqzjLRO+0FvotX1ltDEgXsN04CXqOyJq5RmjznL7pn+XEwZJqt+XDJyp6q9acdtoSHi0VDDABNv1lSU946e9QZ32Ihq7AKhTXXVjXDI/Dzr6vukNSYSRSeU7uDTQperP3/34MG347T8/hIZOcbB1ifF6IZgy81EmyyTQZXvr/nJqKUd3o= X-Forefront-PRVS: 00514A2FE6 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(7916002)(199003)(189002)(24454002)(377454003)(31686004)(8676002)(65826007)(305945005)(86362001)(107886002)(110136002)(4001430100002)(31696002)(65956001)(66066001)(19580395003)(42186005)(65806001)(47776003)(81166006)(81156014)(7846002)(7736002)(33646002)(77096005)(5660300001)(189998001)(64126003)(19580405001)(50466002)(2950100001)(106356001)(586003)(4001350100001)(36756003)(105586002)(101416001)(23676002)(7416002)(97736004)(3846002)(6116002)(92566002)(83506001)(4326007)(54356999)(50986999)(2906002)(230700001)(68736007)(76176999);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0801MB1737;H:[10.30.26.154];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtIRTFQUjA4MDFNQjE3Mzc7MjM6eFRVYmpzcldvTm44VVBPdTBjK1l0bmhV?= =?utf-8?B?blJWK2hteUZRQm03T01qTzRxYmphYnliVk1PNEw3VTY4UTNCTzZNNlVWeGpZ?= =?utf-8?B?dVlIdkNkMFpNWEJoSy9HckdJUnNGUk9oOFJEazJNYnp0VXBwcldIK1hlUjdq?= =?utf-8?B?K1pScWRiMFBtWWlPVlBpQS9jK3dldXdqUmJNYWVDcWdRczg4T01iMmFYKzlR?= =?utf-8?B?VTkweDY5TURIQWRtVWtOYjJKR2NHMS9tZzV2ZzgxenBIbHNQTy9vY3dFdmZF?= =?utf-8?B?YnlSRFNnS0dyc0d4ZlJrMmF2Y1JaTllnUjdtQStDeWtjdjRWVk1KQWpPS05h?= =?utf-8?B?ajVXOXNQVm1LVkFwOHJ1eFNpM0I1ZWVvZTgxYXJ3VDN4NlE3QXVSbnhQOGYy?= =?utf-8?B?Vi9OeXpuU3lpeXhtZGtzOHBjUkNSQURaYWJlVmd3Q2RjR29iZElUL0lYbkxZ?= =?utf-8?B?Ni9oN0RlaTl3UG8xRVdPT1hTcDBzbU00d2YySWFUUFpxR3BRTkJaeHorQ1RF?= =?utf-8?B?dU9CcW1BaDF6UVVQUXBZdmJaNitpOGZGWWR2cWxUK1NDQ3p0d2pFVWpoaDdx?= =?utf-8?B?UkpvNGxxYTVEL043MDY5YnVMdjM1ckEzS2FINUlTWEgzUlZuYzFoaWVLdStI?= =?utf-8?B?bjdrMlpzVU52NTNGVVpmd2thclYrdVhMUnVRVDBOeEZMTmtIV2dNSm9ubU1y?= =?utf-8?B?RVNsRnNXL1pWMWhpdzB6cWtPZjRIeDk4YkdKMnhXTWFkcFFWanB4cThhb3FL?= =?utf-8?B?K2h5WHUxbG5qYm52LytrUVFzalNrNmhSYVVHelpDNjZQejU0VlNqVStDZURi?= =?utf-8?B?RzVWTlBIcUN6VjhUR3BZWjVSLzlzOStsdEJvdnRua1J6RnNWMDUyNUtQc21s?= =?utf-8?B?WW1ZM1g0NUZIMDFOUytXVnBUQ2cxYUdMVlU2amsvL2xlUnkyMlovc3l2aGRs?= =?utf-8?B?d2c1YXpibU00SzNqQnZUOXh6Qm5odlF2QmNmMmtoWE9DdkpSSlduUnBiT1VK?= =?utf-8?B?eW1FYmlKZ2hFM0NkUWZGZUlITnNWRjdGQ0dUUjFTendCME1vanpqaVhVc3dr?= =?utf-8?B?SG5nelllZ0NuVDVleGRob0NTb0lad0luWjg1dlJrekk4L3FMUXpiaFF0bVdK?= =?utf-8?B?Z3d6R1RrVU9aL3l5VkVGdStQd0tyQWFMT1UzTERvMmRCSXA5eVZVSlQzREla?= =?utf-8?B?NS82azdhMHVkdlI4RjBTclNCMjArT3I4QWtsendPN1NvcDJrc0M4UDJZL2lO?= =?utf-8?B?TSthalFnMGFNcFpKOUM5QzE4NFJldkRJMEZzQ0g4N1kxVHUrcjUzYUZ2RDk0?= =?utf-8?B?bFJYZXh6bFhxV3pVai94WmZJNmh2T0I5UkhacEFBblp4OUtjZHpKRVlCQzlj?= =?utf-8?B?bWZsaEpPS0g0MVUvQWF0ZE9hbktYY2lNZ0lsTHppZWtQZ0ZDVkFkWGg1WS8y?= =?utf-8?B?eVFVbDRRUzFoM2FYY2FwUTRtcWFpaEtScUI5dEljb1JkTFNOcVBQcDR4SW4x?= =?utf-8?B?dzBLODQwM25ub2JGRWx0bzdpS1ZqRUlDUVBPeGlvSHU0ZVFMbmlGaDBLNDhQ?= =?utf-8?B?NnZDSUt6eERVby9lcjk5MUJDRzFRcWhjVittRjA4K1YzKzdodUZWdUlPVlpv?= =?utf-8?B?OGVGSXpyK2Zja0cvTFRJQndVV1ZnVXoxUURtd09PMWRZMFVoU1BuR3gvS0dk?= =?utf-8?B?UUI3UlVqdnJRalBDaXJXWFVDcnVQQVJ2WFQ1MUtHQTN2SHRMVmtGMmp6eDEw?= =?utf-8?B?MHVaZU92VVlVT2lsREhvczFwVzFWdENveWFBTEpUMTE0NWpVYllkeDlCOHdC?= =?utf-8?B?TXFqVnhETmUxdkVDRlBJTUVxOFl4SGlBM1RsaWZaakxvUFAyUT09?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1737;6:BdputZxL98iIP0O2EdmvEYqvib/bdjfVUDrq0E5cTn6v14dQA1ZdYrYUfoSCpeArD/9nI8lBjS3E7Pu1h6fBABMcF8ZWTBTIBRUfN56HOqYWKY3BK6d8o+tYycr2Za80pCmuWHp654yRsU7P4eiV1qvBe05HkGBDvutGKUO4Qh04pTgYkrdA7pWcE0JVqCzBqEqgopl8xntTZbF8XzZPlp7vsm86KAsGjZAFBd3Sy2kkd3dgHhrRTERUpoIl1qDMRVkofjuF2A1KUFrIizBcmOgOvZGKQDv+69l3WGjQGRNKL2/l09XQVtJWZu7DXHf1;5:ck+if0GtvQ67fykPesFXTTb5QQHH6W6+JM0umoXpYiGePJ1nRxCMNTLgIHHmRIFx9JyXZhxffiTKVNUrj+JOu4fsmfobCDX9cpCHjR/YPajXgCdrw2U4UVgEB9J2weTNJbtQfN8KpUNxbOjY6XjtEg==;24:MoybTAscL0kuqWKpQWoZtDOgk85YphSMrIih/Otxipm4dBtY3hseRwDCZc2GM2UPGUSSTUIGHr5+9dsz613GBFzn0X+SZRN1OXmBUw1k94Q=;7:3vrDhqkTxv9+r8C4tBS/ZbgYVbjCQRddQ4yhgCv6LMFJqB7a1tpNf92xxGLeqRGFVszGJMkyKplYNLLWl7F9eszAdgOk/cKQ18HcrLC4pquPuYsfQAPtUsIx6yURROdsgDINuHtEZ/u6CS1THOZBwd5WovJE87KuJn3g/acBkBbIGD4Q9z/ETYCiExRDTo9appHnS5oTc9Y9dUpuUIkji0AU8TkMOXYhp8ammRtb5QDvXj3I/nMP13XKHE7QBgyx SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1737;20:EUgi2NZxqIJ+hj5ixn3MSEIUx8dkjeX6SlVm4En4cf+QNvCKdQ6mwLpvjSZYNEFBTtL5hXpuzKNLeoRH/i2pFJoMC96bRitD4mLOpkvFVi3KmK58XjcVt1G5Hrjf52acl6WJkCFwaTG9J9G1vMEp8MqMdHKHqmvm8Un19AzedZs= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Aug 2016 15:11:58.5611 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1737 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); Well, yep, I thought about it, but left without it to not touch additional headers. Will do for the next version, thanks!