Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752248AbcKGWsi (ORCPT ); Mon, 7 Nov 2016 17:48:38 -0500 Received: from mail-db5eur01on0111.outbound.protection.outlook.com ([104.47.2.111]:54986 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751260AbcKGWse (ORCPT ); Mon, 7 Nov 2016 17:48:34 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=dsafonov@virtuozzo.com; Subject: Re: [PATCH] arm/vdso: introduce vdso_mremap hook To: Christopher Covington , References: <20161101172214.2938-1-dsafonov@virtuozzo.com> <0b41c28b-20ef-332f-d8d6-e381e05b8252@codeaurora.org> <714d2aea-ed4c-6272-89c1-e1d0e037855e@virtuozzo.com> CC: <0x7f454c46@gmail.com>, Kevin Brodsky , "Andy Lutomirski" , Oleg Nesterov , "Russell King" , Will Deacon , , , Cyrill Gorcunov , Pavel Emelyanov , Nathan Lynch , Michael Ellerman From: Dmitry Safonov Message-ID: Date: Mon, 7 Nov 2016 21:13:22 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: VI1PR0901CA0062.eurprd09.prod.outlook.com (10.167.203.158) To DB6PR0801MB1736.eurprd08.prod.outlook.com (10.169.227.7) X-MS-Office365-Filtering-Correlation-Id: 6a42e93f-2b22-433e-ca33-08d4073a2b6e X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1736;2:OpNALWLAi643rjd4H/CEcu8pu69ZvbmQy1xyupUpX/WB3jv0FKyrJB+vsP9lvEgExAFSwGIKVeodyNmvDxNSAGa/jDdAE6imLzGZzDp1xakI1vIGEvDSg52ZeRtx2HGvSNYkJY0ms2BNGwnv78MQoornW7ydMjBzcPfvb1IwhbwzTULx6sKYSKbtDWGD6s0v6tryLu/0jIPmvwM21WwVJw==;3:25kXGfjno9l5n36v6Y39XMjo8Egkj0m72EyCaI/fyYLKzUjMKa3mpyCxi6GK4mVCs8/eAD4w70apDcKBXHHcda5fhfTswL9Q0dNw0TknHD7eRiCld5Iz1pkUOn7rEbCAez7RJT9BC4w6sm6vWRoboA==;25:4TpLA/Tm6QzNu3j/UZmKJulSP5OZeiGZKXX+195XrJQvBfLR2PbGSwLfUuwDsjvwGaKjHxd8ns5BcJ1Sp46XruY9t6pZJqVU8vK/ZAGEFwDddwHLjQgPyUVD/sTsaaW+iJ7N/y8IdEazENfmhHduTsiHnDehT9JUC45FcR4XiVP9ctwvA82GsETmsYotcDjL8X8iqTEUT59yALvC9kK9oAKmML1DO8C57umQyDZUG5aU+ldnE+UIOjGk6QyZWLUHq/h20amvMfHrq2vMtEWPJQDReVRNmH/UcqhCTq8vLJDUdRWwb5UG3HF7NyNAlubbSqHSJI/rLmbJxDyYs0/tjCKQAxqQkz4l624yaOg7pfjxeVlHDSaJVpfh+a5F4LNbiBmQHhXJIbCcLzHhsi4Tv/COLkXnzYoqw1OMDe/iIJ5WBnx91iDPFVQdxmOIIjTj X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0801MB1736; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1736;31:R1CtcJtX6HM4fdfgTAoeW8dRBDSyFcYUkGxa66++KV7FCD2ZZq5YWLJ63lb12C+VliqMbsT9L9yWnL6nTI5UFkI84OJGmbx/9p0exFa2OxGBbF/RQOBa9mYX3DOy3RVFaP65QI6ApiClv/owQd9ztsJlhyB1tSv6EPPMZ5ua0TvJS7XZJmVRUhABGe1rCrFtSQ8XwhlxMM7Vse7k/U6HovxMlZcSHgKBuPlQ+lIndL5BvOwR4ZyaYCSN12QnwFE5;20:EIY6Fs8TpqIqWxCd97XVlEuRVG3QZqvcCV6T6POs3XRY+lyCsyX+JUI/blv1A+hMncSRch0JEFSa3mIASi5vymnCwnh7meHGpAfcioLSdHvchR/UP/cEJvTFv3gGZutJ+heyxEAK85Nb3uvCSql4v6WJlgmkg7SB0/9CAq6omod3xZqAZNMbn4y7JfP16in3LzmKSxe6ePKPnYy9Fu5lRN3XSr7ZCKAfmYTyFDbPxU9a5BgTTUoK/L2fXvgOPHV0 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(180628864354917)(166708455590820)(258649278758335); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6042046)(6043046);SRVR:DB6PR0801MB1736;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0801MB1736; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1736;4:8w6dQFQGl7Yg15LrfQRW/6zRMSIiJOUjgvoTvO7FOCmcDZOjNCjNeUIPdyPB8cIJr35AE/woVfEleBjp3qGT3JjamEKZ57xgEbeGfEyQUMD3fb7Mwq+iVPmno5gaII/N7GG0flCjBPymO9hzgBuSd7ToPTODEJ32IzYONbW2xf0JD/DdzGppP7wnlj4fx86s1nu577p9tpZnNMMZVIMflDRMMlWCXbswFMNgfs+/YOfBvQS3g93Q9qiB8ArEPWD854i7h4wmhJ7hRCirQodoVLVtipPPd17EF6v6sRiIIeHZPx71lsTvx7Wd1HU9usbluVamZhj2KRwSUxmD0f1yd4xzKMoxOGaG8EFK3aqLm0jo+afyfRzHQu1jxxoog0Iqw+r3NBmJZ+wLHAu0U8xcCukW4qVJ6bDID6DAGDgL6v0251yBAeEWVg+qlwGpM/mdAnqCeOQ6Y+XXiz4sUu+cJZ56CBah0qpl5oSwoQSwpr2g5aOpXJ+oMY0lp/ljwrT5BQZ5hRfmxqVhGiEEvJnP44eJBT61vcExpJPbO8aM7DJFSNuSmK+Osad+APhJX/IY X-Forefront-PRVS: 0119DC3B5E X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6049001)(6009001)(7916002)(24454002)(377454003)(189002)(199003)(76104003)(42186005)(19580405001)(65806001)(47776003)(92566002)(50986999)(19580395003)(77096005)(65826007)(3846002)(230700001)(86362001)(31696002)(189998001)(6116002)(586003)(305945005)(15975445007)(66066001)(54356999)(5001770100001)(4001350100001)(101416001)(8676002)(81156014)(33646002)(81166006)(93886004)(31686004)(97736004)(106356001)(65956001)(76176999)(7736002)(23746002)(7846002)(2906002)(50466002)(7416002)(36756003)(68736007)(5660300001)(105586002)(2950100002)(64126003)(83506001)(6666003)(4326007)(6606295002);DIR:OUT;SFP:1102;SCL:1;SRVR:DB6PR0801MB1736;H:[10.30.26.154];FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;DB6PR0801MB1736;23:3atCM9zjTBYIgqZn9lcSBRJtPKvJQ1R/4l8?= =?Windows-1252?Q?ubC8UJW+2YxebhxAHa7l3sVr8fFg9/K3V7V8iRDgke5KbbmbD3wA1sIB?= =?Windows-1252?Q?kzqlxtV7vM4zIfseCcWZnzgGls/QE+TVH6AJ5EqMSCaRM++Vxlrfu/us?= =?Windows-1252?Q?NXRHvsaRbiaZG+6EkuJVc5RNud/r4IyedzG254rHbZ/AVzzgvAj53sei?= =?Windows-1252?Q?wRST19RXiRushKzeamRdgDpHxeXWo+GDi8OYGOzrKj/J6H05yyzm5rAL?= =?Windows-1252?Q?cYvJBugYszTyrJIV4r37o3WD2qt7XXcVTLnQHf1//LZoj64ovnNWl/hC?= =?Windows-1252?Q?gmdbkHfdNxHh03G4IyO8pPL7KRx61taxetBayWIL/gx+3lLs7osRuxnb?= =?Windows-1252?Q?yX9TZQY+o8FgQTo62B7IZBCcnQAxFFA5XhcNPGrlfSWAyWgWdhpGb01w?= =?Windows-1252?Q?yvzuRxe8m0vRZYTZvfcGoanHs0iEV442AjuhhqvdmSo5ZrytYDqaqqLL?= =?Windows-1252?Q?qoNz8EZmcwaE8UPmBU+FmIznnoLKdpEv11weRsRE1sfGI/x9ZLxNrWA6?= =?Windows-1252?Q?t2lPNR77/YhY8XK4GbCpFc9DPMIZPpyarYSOQYYwSOSnI3XPBpqvb6iZ?= =?Windows-1252?Q?vUa7DSt5yP0BNbN64cndsevjX6Mv29dg/zpw8C1IQ/vaBY6HW46K1vK+?= =?Windows-1252?Q?QMc8yIy8bzjdpwO8xxRK1GNbAO4TOFFhgBhmE8pWFH4KlhuzQTWTVYPA?= =?Windows-1252?Q?5DG3kdBmeK40eWCuZ6DUPX0vJ5n0QvgxW0Y03K3zD9kALT+mCC0CWFpm?= =?Windows-1252?Q?ITrg06Qi7x7TOm2nNhcwRxuYkPOFKK9kSBLrDZTMW7J1SOhCj1N38Z6u?= =?Windows-1252?Q?lR99KHOidSRi2czcOdlm7evvOMEAswPTuWlKVMfyX0lCOYFkgGVxa/gk?= =?Windows-1252?Q?2xCW+IKjB32z84eY3/OmONEuetFr+Rx65YwVB7s7g3HDRb2V2vheRcwv?= =?Windows-1252?Q?MTlh0DNuQx4KWk/mLC7MtX1z+K4yEedlYq3TWWxd7AQ9N6FKVMlNzuK7?= =?Windows-1252?Q?BrgVA0bXzUIEzF8U50/1MHuRYMzAOdpNuzuSSdCIrxPNP/ykjzDSlLmG?= =?Windows-1252?Q?ktra5D85pIs4uZJ6vYZx8Bf8OGY9r2UCeCBUE5I3JtwNghQcrjb85gJ2?= =?Windows-1252?Q?XHutkcfhS8jWXD13FOflykXj9p0xkHWkduglLzu0LW1M2AVgZX/RNjW1?= =?Windows-1252?Q?bjYf9AHHE8VLcXJ9ReY27PQPFvd02/2tdBfrk2Lzso3HInL2HdoMh5dD?= =?Windows-1252?Q?L7oBSz5N/2EKePQRC1K91Ge8cX4uHwM1lzIUdeVH3NpbijHitGo587VR?= =?Windows-1252?Q?7bJA92COBva/V5zxPB9r8D/h0qSVKjnewrK3fFn3c9E09k/5xB8xa5NJ?= =?Windows-1252?Q?3q1r1vNELqv0JtgQom/Ku9DoviNoyGoovY3eOWlhDS9gc84VUHODiqQG?= =?Windows-1252?Q?yH2VspyOSmLhRo/hhG6tutz4TB1y1vE3+y/OkHz8Tx3ioLhMk5yKf9o9?= =?Windows-1252?Q?UGoNbo64NyszSUzI=3D?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1736;6:ehc5CPUZ2jMXGmNeNi/mCB4yAI4IeQjAhzTsXm9UyB8NA00nKYKcxvzRtZA3m/bBZWVw7/67q3qx1GVzjaO27e8AKsrT3CKfCG+4J7Rn+eAi287DhYNwv13rG2dTLdMotNM/Ko/PaI/8HH41Adv41ICw6522lYRReM/7LkCi5SkjIN1fGQqO/zO7do2OuWtXVDCIyBcTRRQKZrtvc3TBYDnRwf7us8qpIizXliuhdJhZnySUwcQ2tN6csFm0AQ4nVsBb1dTq/WK02th2v58FKpKObmx7WlSS/fOtq1faHOQVIX3MYIT7GQbfKQo85bhPOLlXKdaDp6p1aEr2/HmhPQ==;5:TGTvFXtxMBLYtBt8CStUFc5cotA+Yd8NCxd9dtwgV7m+67Poy08EWCFnsWWMD58mryyPw+IerBW+9rPmw0GxFuhC3zIB3MX41QLkhSJ7DkUNz1NqbMT3Av+iynbxXAizRqMjMRRZumTVGftl2Oi+FlOH31+xwOatIkSc8gDxr4U=;24:X3wQceYGsMmwmlt70nOGqiQbECFZ9h8l3Busu2Q0JffsJlarQQoXa2cBy7N/VAhkTMUQ1aECPI+XSSnj3rw2r6CYpl8k87+UHLPoMyFOe1k= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1736;7:5V2Ch1bm3ER5PFVrE1q4+OWbVSqx9IozruBSElocnCR5ePcFjhNv5ejQkACZvotsDmU3wbJR9jXeQjrOroaDXRBD3WNv3KSJngb+JxsPZwlpw27xlfcnVfR5c91k8NeFZ5AVG/oPcpKQKDBLI8A2ss2fbFSrbl9qiGzxIs7+qFH0o8GoLstrshBMSois0FYs0ZgD8lSf+OMEbMqT0ZY35wsLsN5f4tsOOLjLYx2Dw/iy9LpV6qtmEjTZqnW3U/8aTfKurfQiR4GbAB+vTysOBxG22qwZM3nfn2wRq0lUx36ESjN/iyCOhtKJp78NHSmcSfhlzJ1zOvVVBuCMQAB+qO/hOXJ9G5UJ8sCu2GZOLRI=;20:cuYyUe2DUVvEWp9l7O+lIRKz7W9fh1oObTYdLXjKJF1tUPJOVTm2nrl3UpfLkqwGJXPU2S0CgqHbUoYyaXWk4UmmKYfJznveRj/1ZHee/maw+J9FAOva1haEgOcq7v5EzOJYQbJNgc6kfuqYNHwpnitFhujJZhsS5DrgyN89YOI= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Nov 2016 18:16:16.6226 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1736 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5377 Lines: 123 On 11/07/2016 09:08 PM, Christopher Covington wrote: > On 11/07/2016 12:16 PM, Dmitry Safonov wrote: >> On 11/07/2016 08:00 PM, Christopher Covington wrote: >>> Hi Dmitry, >>> >>> On 11/01/2016 01:22 PM, Dmitry Safonov wrote: >>>> Add vdso_mremap hook which will fix context.vdso pointer after mremap() >>>> on vDSO vma. This is needed for correct landing after syscall execution. >>>> Primary goal of this is for CRIU on arm - we need to restore vDSO image >>>> at the exactly same place where the vma was in dumped application. With >>>> the help of this hook we'll move vDSO at the new position. >>>> The CRIU code handles situations like when vDSO of dumped application >>>> was different from vDSO on restoring system. This usally happens when >>>> some new symbols are being added to vDSO. In these situations CRIU >>>> inserts jump trampolines from old vDSO blob to new vDSO on restore. >>>> By that reason even if on restore vDSO blob lies on the same address as >>>> blob in dumped application - we still need to move it if it differs. >>>> >>>> There was previously attempt to add this functionality for arm64 by >>>> arch_mremap hook [1], while this patch introduces this with minimal >>>> effort - the same way I've added it to x86: >>>> commit b059a453b1cf ("x86/vdso: Add mremap hook to vm_special_mapping") >>>> >>>> At this moment, vdso restoring code is disabled for arm/arm64 arch >>>> in CRIU [2], so C/R is only working for !CONFIG_VDSO kernels. This patch >>>> is aimed to fix that. >>>> The same hook may be introduced for arm64 kernel, but at this moment >>>> arm64 vdso code is actively reworked by Kevin, so we can do it on top. >>>> Separately, I've refactored arch_remap hook out from ppc64 [3]. >>>> >>>> [1]: https://marc.info/?i=1448455781-26660-1-git-send-email-cov@codeaurora.org >>>> [2]: https://github.com/xemul/criu/blob/master/Makefile#L39 >>>> [3]: https://marc.info/?i=20161027170948.8279-1-dsafonov@virtuozzo.com >>>> >>>> Cc: Kevin Brodsky >>>> Cc: Christopher Covington >>>> Cc: Andy Lutomirski >>>> Cc: Oleg Nesterov >>>> Cc: Russell King >>>> Cc: Will Deacon >>>> Cc: linux-arm-kernel@lists.infradead.org >>>> Cc: linux-mm@kvack.org >>>> Cc: Cyrill Gorcunov >>>> Cc: Pavel Emelyanov >>>> Signed-off-by: Dmitry Safonov >>>> --- >>>> arch/arm/kernel/vdso.c | 21 +++++++++++++++++++++ >>>> 1 file changed, 21 insertions(+) >>>> >>>> diff --git a/arch/arm/kernel/vdso.c b/arch/arm/kernel/vdso.c >>>> index 53cf86cf2d1a..d1001f87c2f6 100644 >>>> --- a/arch/arm/kernel/vdso.c >>>> +++ b/arch/arm/kernel/vdso.c >>>> @@ -54,8 +54,11 @@ static const struct vm_special_mapping vdso_data_mapping = { >>>> .pages = &vdso_data_page, >>>> }; >>>> >>>> +static int vdso_mremap(const struct vm_special_mapping *sm, >>>> + struct vm_area_struct *new_vma); >>>> static struct vm_special_mapping vdso_text_mapping __ro_after_init = { >>>> .name = "[vdso]", >>>> + .mremap = vdso_mremap, >>>> }; >>>> >>>> struct elfinfo { >>>> @@ -254,6 +257,24 @@ void arm_install_vdso(struct mm_struct *mm, unsigned long addr) >>>> mm->context.vdso = addr; >>>> } >>>> >>>> +static int vdso_mremap(const struct vm_special_mapping *sm, >>>> + struct vm_area_struct *new_vma) >>>> +{ >>>> + unsigned long new_size = new_vma->vm_end - new_vma->vm_start; >>>> + unsigned long vdso_size = (vdso_total_pages - 1) << PAGE_SHIFT; >>>> + >>>> + /* Disallow partial vDSO blob remap */ >>>> + if (vdso_size != new_size) >>>> + return -EINVAL; >>>> + >>>> + if (WARN_ON_ONCE(current->mm != new_vma->vm_mm)) >>>> + return -EFAULT; >>>> + >>>> + current->mm->context.vdso = new_vma->vm_start; >>>> + >>>> + return 0; >>>> +} >>>> + >>>> static void vdso_write_begin(struct vdso_data *vdata) >>>> { >>>> ++vdso_data->seq_count; >>>> >>> >>> What do you think about putting this code somewhere generic (not under >>> arch/*), so that powerpc and arm64 can reuse it once the cosmetic changes >>> to make them compatible are made? My thought was that it could be defined >>> underneath CONFIG_GENERIC_VDSO, which architectures could select as they >>> became compatible. >> >> Hi Chistopher, >> >> Well, I don't think we won something out of generalization of simple assignment for context.vdso pointer accross arches. And a need to rename >> vdso over arches for saving one single line? > > I count 17 lines, which duplicated across 3 architectures becomes 51 lines. > Presumable in the future other architectures will want CRIU support as well. > Additionally, should fixes ever be required, fixing one implementation instead > of 3+ is preferred. > >> Also I don't like a bit this arch_mremap hook and need to nullify >> vdso pointer. > > I'm sorry for the confusion but I in no way meant to imply that the > arch_mremap hook should be carried forward. I fully agree that the function > pointer in struct vm_special_mapping is the better way to go. > > If you don't want to implement a version with vdso_mremap defined in a > generic location (using it from struct vm_special_mapping), do you mind if I > propose such a version? Sure, do it, no objections. -- Dmitry