Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933552AbcKGSym (ORCPT ); Mon, 7 Nov 2016 13:54:42 -0500 Received: from mail-ve1eur01on0101.outbound.protection.outlook.com ([104.47.1.101]:29312 "EHLO EUR01-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932586AbcKGSyi (ORCPT ); Mon, 7 Nov 2016 13:54:38 -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> 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: <714d2aea-ed4c-6272-89c1-e1d0e037855e@virtuozzo.com> Date: Mon, 7 Nov 2016 20:16:58 +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: <0b41c28b-20ef-332f-d8d6-e381e05b8252@codeaurora.org> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: AM5PR0901CA0005.eurprd09.prod.outlook.com (10.164.186.143) To HE1PR0801MB1737.eurprd08.prod.outlook.com (10.168.149.149) X-MS-Office365-Filtering-Correlation-Id: a9cb3df6-98ee-4bae-fc3a-08d4073248d1 X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1737;2:eV42aCRvMTmDE85IRiErkCP9VDEsbMzQeKQ5Z4i23DDFLqXiy8Qd196Ffwe/RcRQ0zJingcKb8YiiItMdjDEkKUHLDq9FYRIJiVX2DeeOJ0xYTq3maenOUoPHpGUnCPEI25N1/MqGQqnEjC55RIV5FbgAL+go+N0m2eumGUoRkfnuNpFJozi0P36N7cnJlB+YKbZ8z7ZHq+LydI+Rd/ivw==;3:J6Kt6Ct33rVGGAJOphDBUywtC8hr6I9cHA0pRGN1k+jeVwYrgn65O5qJVxYisaL7NGL55dbduTIuz/dkFBDdDzmHH+gUJUCZ4fPxUIXbS1/QZ9qHJ9Mmn33KX0XlPHj8o0jAAm2kEWiVlEnTwdzomA==;25:1WndieVIHBthQZOzheYqZcjHp4vcf1ZSpmMqI40+MSbQYj2XbPRuAXB+W2eoNXio84tqWA9An657Pb3h56J7TATWqhO33tpWu3iAylTBb9LIIBDNXdskeX/yHqX8syJvRnqBTh4kqdaHyizasPyE5R1x6Xi2jeT97K2hEndmXdle7nsdm5vr2Tuzefff/bUA3CCDTRhxrN3o13Rtfondm082gjKElzMgmFgonpCW9L2dkQYBs9/nxucpAKYpqLl251qa0w97ZszDFUuXqiVB5v0zZtR+KPkAPxERi4U2fQmBSx2azePTEwXPHbX8MR3Qdy8GLm7MLPwf+91V1PzlsSEB7nOaKPZJD+D9WfNjni2WZMn4s24YnK05+RIqyrYf0t/CkmYZClTyaHqThDsa6novt05j/UnLs6QxxzARbum5Y2pRa5esJsr4xgSxg+Mo X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0801MB1737; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1737;31:+NNvXHakZCz2pYWa9OV/KiKFtdu+HX9WgwOSalGYGxar/QzeiKYgHbB/9y28BAjpoo4Od+LQxmbag9HXNDm2GO2xU2GRZbZg3zlB2Lyc3G6IusYer/Q1eP1Mf8YsyhxX8T1Wowidwu4OzhdOcQPeImwVaSyeGMlvh0SQP9G1OeYoUgghhqtMh2a7EkBvJ3fGg+5Lv1penIZGgjY7Qnp1oO6DP/l8k3TjkjtI1IfYwvBTBtV2QTxKgjgJKuCxvUQeSxtJn0mTHNZIQUE6vnlsWw==;20:Azbfb4yPNYfYPYcCZfnjP4cGY0coLzOKunFQZNLky62k+N4K0nSb5MKrd6IXKnplFEHi+wvagF7e4ARAY/Swld7pLlQjmKeOD82Ub/GEcAOaeGRJb5xoLRHo53clNFVQdzwP5j3fHr60REFcNRJL+HmyCi/qQaShGc2iWWVJHR+ZEtchDPZj8ybqZSVE1O87gmX9b4P4VIATHI+5F3xVjpDmxyLytjChrQH1MGGjEcWWRr4GdOpZuTUCIE9toyp2 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)(5005006)(8121501046)(3002001)(10201501046)(6043046)(6042046);SRVR:HE1PR0801MB1737;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0801MB1737; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1737;4:Hp7zR+/e8YLisiFjL4ioXhsNz6O/lYEac6EOZyd1I1VpWtErvf5OhNL5DqAyK+NPfpQDOjIast0VG9d4pQYbudomfaD6jW3aMUKpLRO1OJOuFyxA6mgYqbbag3cBorgsqVkJAsMKt00MlrWzr0yr9Nm3Vko1/cY/rocpHyG7YGqbMqw80fXX4sXjBlQBcOVMMdcGYjzG17bSQTIQPNO/Dx8XuvOI7FrMfEa/X9rJnoKpXGSBKytcUDafjHE0jY+q0TsQoJZJpHYB2zPUzKvsMpTyQgcJ2PmnBblvrnOjftzwNvnGdUJIb1V58XQ9A08rHTRt8idX3/zUf/CsV6GQcZrCo9xS5r38adEj3ytQYNrSDOUj7bcqvQ8VtZsDgzXKp2qf4BhWVcthf339AuFNQ005XQ+xQukJZFo8lZMkZftn43fKbeVE/pGuTCOgbd7dpq2d7kIX2cw8OaeuWWcWMSMKbAsWPXi0+jQbWoXD6CEtC2VPmfz6Y+afJgnMWaXbhhyxHc+xbVpznZs2V38kWHfiYiK/jsQQb3YQ5XVH4/Q= X-Forefront-PRVS: 0119DC3B5E X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(7916002)(199003)(24454002)(76104003)(189002)(377454003)(52314003)(7736002)(7846002)(31686004)(33646002)(106356001)(8676002)(66066001)(36756003)(81166006)(81156014)(31696002)(68736007)(86362001)(189998001)(4001350100001)(50466002)(92566002)(15975445007)(5660300001)(101416001)(77096005)(64126003)(230700001)(23746002)(2906002)(6116002)(83506001)(4326007)(3846002)(586003)(305945005)(54356999)(76176999)(7416002)(5001770100001)(97736004)(65826007)(65806001)(19580405001)(105586002)(47776003)(50986999)(2950100002)(19580395003)(42186005)(65956001)(6606295002);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: =?Windows-1252?Q?1;HE1PR0801MB1737;23:gAeycSZwwHgNdrJwsxQzEPWlacd5dHri4ZC?= =?Windows-1252?Q?DAY88xgZPcCRWi5FTxSuPvtCxPR2eQVVMTz2gldmB6IoIfkqVPyZp6hy?= =?Windows-1252?Q?A/FXOBfQ+G8v+C0A3kfnbSkZ+8NaU5qEedn9e2BIKhq6m5aA2DQG0g+l?= =?Windows-1252?Q?Ph2+39AB65ztJhuhxVM0vgHV2HEdawPeelqKrl4v3rluTbHs7YbcJ8by?= =?Windows-1252?Q?SnSwJfBMK0Pzq1zUSxTHk2M7mjSf2fGJffKFfhjyc7uMv8uwsM0EiR0t?= =?Windows-1252?Q?rBIlZJTasLsfFDKlyU8KvX/mpc/7ayk3ZWqggiL2YubN9fuwgQghw0K0?= =?Windows-1252?Q?LL9dr5KNpCwLBPijFx/dYTktHIt5dv1Orzg2Qvvhzk5aDciH7f5qQpqb?= =?Windows-1252?Q?ZYU4kdbPXjYtza0PcmF3Xk5+BdsfgVjszTtjePdi+xYwMUoP89seIISh?= =?Windows-1252?Q?Oc2ZV4cnnCbTUyF3ad2m/uVP85weo+CK3OG3uCaLED4KpLFLqGZVIFm9?= =?Windows-1252?Q?6yODPyNNvR0gC4PPE2/vp0fGblrHSL/tVBGxCempTI2NPFNbMwP4T3GW?= =?Windows-1252?Q?0NLKbt96fWYbCSSUENOrvePZrCaWUWhbzR2+OzV7dPzPKtwWy8rAA8Un?= =?Windows-1252?Q?dZKmuXugSDyNsusNfe7KNs/A9QsJjD2zHi0ocxowaeQfa6vYCXJOTLMB?= =?Windows-1252?Q?9eULr+9GJ+mxMzqkJmYisXWQOwSGh1Jv0Tg4LXxxCdYIXHXHK/ycMb/C?= =?Windows-1252?Q?ZoWzsk1JhK6sJBrKIVNxfv3kKaWrAolRmF0z0aun0VdDZYSy0JUGUc4+?= =?Windows-1252?Q?qpapc6BpjtEgcmYbX01I3T9YUKYmk+f/5E2sAD3cV8aJ2fgEA7FVdgxW?= =?Windows-1252?Q?4yRfjCTMRZ4ZH9qkzrwRRLPHmUjkoJiwnqwJ7Xs/8fT5ShNX3Thi7dHP?= =?Windows-1252?Q?A7wtLYd7P0MZpdiFO5LVY9z6JooFojwZMBupil5o1gspUGdnsDxrvpuh?= =?Windows-1252?Q?4sKzPhmLny6aCGTlix5f8MDst1+WvRpqqxbn5o6wEuLjTzMkXxhaFevw?= =?Windows-1252?Q?RPlZqRd+305C4T24Tie0pn6TdmvP3IHqCa/4itOSBXtZv/r9wty2yum0?= =?Windows-1252?Q?D6kbL4RslN3fbrfP6SNek2s2tRgUahUsAkUcoNctVZeVanW4Y5cHaaBY?= =?Windows-1252?Q?J1VHLinSvYpF14+YES1smZFkU9ID2tRZSc2PbhBQ6gnHN8vxEahAgTiT?= =?Windows-1252?Q?d6l6LINkcgb1vIxkCQA7htLHbENE+GqSpCgOgJt6I3UvbqUQ0hb19K3Z?= =?Windows-1252?Q?tWxmWpNjNOEkg+rDxxBudxiIDZLOuJMndFBZ04ybnG+Oh0zGUFwIzSXp?= =?Windows-1252?Q?Eiz51tY8UF+BCMPE8pdD8KIVd2toO6nOOEsw/ut5GMD3m4fZ2WBBpTh/?= =?Windows-1252?Q?o8Tye2RkbCnhFYzJU63Q29Wq4tXfbSqUT0o2RMF6U63kq9uIEUhTmzM3?= =?Windows-1252?Q?UGBCJpU741UDVk98FxxR0xDD1D0Vp+zl8Ktao8x4LozPY2LE0wA=3D?= =?Windows-1252?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1737;6:S8zU7xMpcx2hT7lMXsTc4StpUH61lPjVfu70TsSbMYNgPDCXsjC5sQLfYDxkpqMLlNw2R9IIunvO2NGp4/7TjW/Kg9j263oe9j4mUP+AygbZNa7gTLqzMEjOqGqIe0jrjLMP2xYxV73RhwdmfY/2cxy3HdR7+qf+sfiVsC4wJ36ITovRttTM2pqNnGiOJSJTZMmwdOnjLDmCtL0Q1GdEvOqvwBPbEBMnP5IePwoNvPmQBbOctIio7t8TM9Hr/Xm52LGRuCxjUfwHcCmtJf4dVFWz0Px3ClMIvw+Cj1wo1kx8HNcIyZbkEXPwUS7gKEdaZcVNO9MlwJuQwwKETD268A==;5:22qgdlcr4vEnmcT8B2IxZAOtN31tIk58TykkLIPCz7lV7WUMpITfAcYor+j/aiMIbibdv0mOM+4hfm8VWUSrq9ue6iA7MS/pgr0z8B+tj4ljwIx/7G0tYAiIce4Jg1HRCnC44N/atEft4LI26Q6JzA==;24:FiSXYH/A4uTI0/kAvuXq8cUyb3EhfOQGb05EUgBg04p8zSGMB57IPAZxHZzCBQbyTXkpKaqZDg1S5nVLp06QaTxjpxFGXxqZwSVPJ8yCaY8= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1737;7:CYwUROeXCbHE3bRHVlCKPoZuF82zwu+GinsJzevhkU8c91SHml/D+iVVexARsLWB+wgXWZP762h7zXSNOyFgrSiZpeSSj8Rx829FwQk9wK7LvsMBsGrVn+nQovn8icIkdPI8zdP9J7oVvZ/1pPuHA5N3tiAMN/Vz45l0V2xm8RmUQ6/kn4b4VQ/GO1N0h4AHu5Ej9rUDgZztRnBAmi4E1Wvcn5qWb8rvVSKrhK1ENda+8H9xWAiS0n7hjhxzvWp22ftbMfz1sL2fXR1pDigrGaZ0LFkh1VFXPJ93YHMufiZ2FRoRUq0P69x25aoOtPyS1XxqukJnUpRRclzqjF0mSNoWVcxE2JIvGpr1AsOH6J4=;20:TMZEHeq8MH+5KT9mAYfR8dgpOI593woEc+G0JQwwqnxRzMhu7k8MY0cbBkQwgOICEzME4HIzQBJInvrKNZywNKguLrUr1m/0FGPzd9RPaHT7U4lzr37ZyNyxukajB/nfN4+nuRquRZJkoXZhkvvy7pX62Uj+16hqHi7zDM5j7HU= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Nov 2016 17:19:50.3451 (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 Content-Length: 4459 Lines: 109 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? Also I don't like a bit this arch_mremap hook and need to nullify vdso pointer. But, anyway, I don't mind if your patches got applied instead - this unability to move vdso prevent's to support vdso vma C/R, as you know ;) -- Dmitry