From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934592AbdERLNn (ORCPT ); Thu, 18 May 2017 07:13:43 -0400 Received: from mail-eopbgr10136.outbound.protection.outlook.com ([40.107.1.136]:57831 "EHLO EUR02-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S934180AbdERLNh (ORCPT ); Thu, 18 May 2017 07:13:37 -0400 Authentication-Results: virtuozzo.com; dkim=none (message not signed) header.d=none;virtuozzo.com; dmarc=none action=none header.from=virtuozzo.com; Subject: Re: [PATCHv2] ARM32: Support mremap() for sigpage/vDSO From: Dmitry Safonov To: Russell King , Will Deacon CC: , <0x7f454c46@gmail.com>, References: <20170414132529.8337-1-dsafonov@virtuozzo.com> <871579ef-ee9a-c321-80e4-47836bb0e472@virtuozzo.com> Message-ID: Date: Thu, 18 May 2017 14:13:29 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.0 MIME-Version: 1.0 In-Reply-To: <871579ef-ee9a-c321-80e4-47836bb0e472@virtuozzo.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HE1PR0202CA0017.eurprd02.prod.outlook.com (2603:10a6:3:8c::27) To HE1PR0801MB1737.eurprd08.prod.outlook.com (2603:10a6:3:87::21) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3949b365-e08a-4dda-3719-08d49ddeec27 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:HE1PR0801MB1737; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1737;3:opURaROaVMOdsX9thw2c9Lw0HFhzxGwtvs4R3b8w4HJx9k0tJDCkvg61a7Vu7Oyb1vVaVMFd103KePws/xpGUUSlnDCSWBBgXxuJsd363k1DdPEjNoMyH0tHQmclcBL1sevzmbC1I6xOGCyNGEwD0UV2OS+Am/fMEYmaH44zst4ZhLlkUvwL1E/GA8XJqxGytFCrC2UC9l6oaNqoYT1M77iTu2M4QU6v8rlPvSdtJBM7+r1bfhwFrGN/QvYxA39Lq9n2aGkr0rMFd8Vgc16S3159n82zE347aVqfd5P9qVPiEQbHsDErFtt7FPQ2VEbr5LH3RF8QYU+zAmimocBNIA==;25:RQNC+hGtBkddI+Ga6VumiqNrxvWS0Y2LbPKMjvOwyg5dRfsQka8ZvuDO1P53FLgdC+KRDPGMtC6mPSNIBZnIRKhI5yRHJfzqBURLk6MKAOOGJXWUCrTOkGaTjaC2SbXYpu22LNQp1BEWEJEfU4QPQw3xmHPgqOcwYJBxlFmEvbHJ0BHPNLn861HkvUrw6LQUQVcZSJNZxEGDCreNfa2A73dvb4WSrA5zXiGKMM2gvjZkSODE5QQSqrCbZQ9gA+HgvVaoSKtPc0ymf/uaKq77Jm2Unu/TMlfTc22mjUr5pBmN6KyJyLJId94TFKLyI10PhPgFjkwm7wwMZ4P7UBNnhkeLV8BFPUwqQArIECQJdRAeVL/xLiynFfGGA6sE3QaHQGgt7k2Yl5zOMPCPmUJXkF/LLaz9kJ+1IUxiWk8UCK+Py8HcoHODcMidc81/Azr4bvzJ0qsQfmWFTh3wH3H8xbfNxaHOFTBOX2OjaCKizno= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1737;31:/9UwIVi77hatr6p5tLOo7IyYECMsgDpLg9R+wPVFSCpUAN8+nJpYmQY0IA3F2rmFLilW0qoNkXpRMsz/mMc8vZVZ7H1cGdd3dXX7Zxx+YrcA8BCqqbqCLyYU+/32asUszSv7XVFEjDEMp/30JRKM46RH5Ug30uDISCkxd2/6CkaIzjnyXtlKOdQJZr/o56qaiYOJtSRvjjqxEkBf20+gT74VeyCqPT75kOSZnMzow5M=;20:fifWb4AT7o8K0nONOOi8F4FAmZ2npY1ei9zADnjKbzjjV3TlM+RuxISrmV4x9vLn9rT3biOzgcOGKfXsyoe+Grblkrq0lB3MgImtX4FawmsKnVJOKblf5KvXkLsgWMt4hkU3F/7ieSvLVoCXbT7VLOdYI9jlhh8heKlqUptndAhryTSmdmqGi+q50TN640rFYkV/H23QBjDb9P6u2vXgGzrs2wi6ciQOvonzZQXR3XZc2yBz3WigM6/1ygjL1pBwKujcliaMIik/eNTeSy/52eS+InO/5/BFaU+1xa1MjPjnGVLwEVtE25oyIgmqEzGSup4bo7egLwD4jUUxwt+8iaylTlqC0Ue+L/nE9I1ttzbzMBFFZkMliqgJ4CA8rkNp8//9EmORZX4c2RTiulaglY0sV0sGh8S4Q+9OoeqIsnQ= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(180628864354917)(258649278758335); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(93006095)(93001095)(6041248)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123560025)(20161123564025)(20161123555025)(6072148);SRVR:HE1PR0801MB1737;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0801MB1737; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1737;4:cUSOqzOMeQYhcVNG5yEv7kEPvo2Q2PWXe+9Hy53AOMOIJwt6sDcGyTTQvVXMdxxlVqIPSu7wVlxMmamenmRwCtdpSpRgButLCwR/sBxyZIUt0Yhom5HHwz4f6X3p5MonhFB6JTcgyVPBFG6gLB7jOyGd9HFpmXFEgfdUC8F4UvC7Nf6LXqRBk600lKpS2RznjZLA4HqhdolbpZ+43ei9oDyswvjuw720plrc3pfN+W8OBIsUhOxQogSKEpJoWINgdGZ90xsJUrgQOddp3CyKdcmkzJlNNIAk/mr1llG5hnpUYG7gy8jVl5MXewTPxxJUEKzQuI4rN2YvhI2fTm4vtx+5Y4jRABd1hDpE+gMqKvuLsh+DS7/ZrR+3MIA6S7rXOFLOVjwLaMFtoEyMSUi5XV2sEGM68F21j9PdTy2MIA0RPClNVFzgGSiPIn4h6VnT+bfWMn4R5a6SIjoDt6qgiR/ELLxWyXatBScaQAuqfdW2q3nnsHinzpQ6uDmQxs9/j+cZJQkIEx4czS9sX471Yf2WDuCI8RJ45gz3TM3BFHXDjOXMMl0hFfhEnWqpGoFt9/lTZBLNCNUzDwsrjsQRK3mI22nDyoZhtAd5kAm5JM6V2RN1+5PkEUr8slLnZfKnf7T/EJfMdoVw0ZXxFgTxvmcVUuhG78/9hnZbZcmfsInzHFGoGp5D3cWd/p0joKSHJkMrztv57iT2NC5rhdgYPIpVeIzc3Baz43nx7/ySSbuqoWV6jO2mzWPBRN1ByNbDKra0e0ydmoPmJCDaBfczg52GYbZ4uqhFU6b/3UAFiZF1ffc7ilvbla4nxfjXJ0PScQzo8n4oS/PUC4SS6ebD2l012WDvUtqAdEJTONCZlxI= X-Forefront-PRVS: 0311124FA9 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6049001)(6009001)(39410400002)(39840400002)(39450400003)(39400400002)(377454003)(24454002)(65826007)(64126003)(66066001)(7736002)(5660300001)(4001350100001)(23676002)(2950100002)(6666003)(31686004)(33646002)(50466002)(65806001)(189998001)(42186005)(83506001)(65956001)(3846002)(31696002)(77096006)(38730400002)(25786009)(6486002)(4326008)(36756003)(76176999)(478600001)(6116002)(230700001)(86362001)(50986999)(53546009)(54356999)(575784001)(229853002)(53936002)(6246003)(81166006)(8676002)(54906002);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0801MB1737;H:[172.16.24.230];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtIRTFQUjA4MDFNQjE3Mzc7MjM6TlRuUDZNSHRiL1V6TVljNFY4ZTJqNGNN?= =?utf-8?B?MGVqbEpnOGRxRThBQkdQT3pZWDNZMzlPdkxZS1V2YWtpV1IwVVNRc2liV0xu?= =?utf-8?B?eEZKc2ZIWkVINGh6MXoyOGt5NU95M2pkaXdFWmU1ZjdZWFE3eVF1dXdUbHBq?= =?utf-8?B?cjhqSit2WlpIaklRRnppNVRqSU9jZ1U3TUc2Y3Noc0RaYWxyMy9oSE5IV0ZF?= =?utf-8?B?NTd5ZWlzdzFFajhWdGpjUGdrdE56Umc1dmxNc3RwVlF2bnNKdlRZOUhxc0xj?= =?utf-8?B?YWNMRksrRnNKZWp2QVBCVGFFMmltalQ3MFRROTVwTUFNV3owQUFWRnZSVmNp?= =?utf-8?B?Ymt2REZaSkJWQXlMSGhLYnc5cFpSaldrZ0M0ZWc3UndJbmE3Z0ovQWF3UlZr?= =?utf-8?B?VC8wdzBURzBPSk5VWldsako2Wml0RHhOR1dUUVhKc3FldUNXdnAvSjVUcm0w?= =?utf-8?B?RExyZXNpU29iU2VxdlZaamxHd2RaUmFvYW9GUit6dW4zRjk2ZS9WdTBkU05J?= =?utf-8?B?VzNJeEI3QUhJM1lMQnZhOTJuZ29MVnQwcDZnWGJ3eDdlL1dVR3dKQW4wRHFJ?= =?utf-8?B?RkliQy9LUGtsOFBMSVJyU2pOT2E4ZFlJclhQcjh2WHlSVEVRbkVEVm5TY1Rk?= =?utf-8?B?cnVBc1FuSUJ0UXo3NzdmSktvNGZpYXhweC9RVlFkVmcrSEhrNitmbGpXT1RU?= =?utf-8?B?K2hsM2huQXo1bmcybmpMZWtFNGsrSXVmVjNZZ1Z0Mit3YzVKZGxVdGRIMm9V?= =?utf-8?B?bEhsTGhLcENsTlAzRWY3SS95ek1Ia01yNHZZS3lKUnNsKzljSmlQTjJ5VnBH?= =?utf-8?B?ekZuaGlWcmdhNm1kWFF1NkNGK0xVUzFaeFQyU0xnOVZ0VVJpaWxVbHlpQXRY?= =?utf-8?B?bCtSa2w4b2l5VmdWMUZJSjloREZVSzNsTlRFcjdaMmNxUzNpWC9ZemRlRHVO?= =?utf-8?B?cGZ0NG00alF5UmlMRHFTMjNPZ1BiM0tpeURwQ0N0TCttbHVaWkJsaGlISDZz?= =?utf-8?B?U0JOOGphWDF2aGcvNytrSXpJS2JqQlorSzR6ZFdyU0lhMGRKeUZnTldWVW1r?= =?utf-8?B?Z3FlYnRGRDdrL0o5eStvZXBqdENObGdndHo4QnE4MXRpMHprVGRGWm5MWUlJ?= =?utf-8?B?NjJWSG9UR1dJM1M2MHB0cFdWNThiSUxESURIaDZaMmtDeHg2YVBZY3BSZGVa?= =?utf-8?B?Smk0VElZTjU0ZnJ6bm83THJZa2hsT1FYSVNWRUh6UkovY0pDdExkaTNwbjZk?= =?utf-8?B?VWdSUjduWWg1L2hFcHN5cDVkSjhDUDNpc0lVc28wNVdtbFc3eENsTGxvRGlt?= =?utf-8?B?b3g2c2Y2SjhySDA5b1RCVDZBQ20wandwWGFxc0Vqa0grQjM0a09NYTRvOVI2?= =?utf-8?B?TDF3UUtvaVVETmNaZXBDanNTV3dNVW4ydjB4NjV4Qk44SGtTdXc4dDZBV3BG?= =?utf-8?B?NTI1V3NNOW1DMi9UdDlobFV1ZnBiY0JzVjBQQm4vMWo0N3Nsd3NQaGEyNURv?= =?utf-8?B?WU5GU3A2RjRlZ0JhWlZCQ01NSGdZU0R1YVhrRURnV0xkZCtTWElSRUVqS05C?= =?utf-8?B?VERlbGZYeEp5dGQrdEk2Y2VTcHdLNGFBS3N6akx0UTIzeEt1MkdJMEpDbGFQ?= =?utf-8?B?R3JtNHlncCt3TGVGbEUvSUxoc0EvN3RYdlVBS2pwVWd2ZlNaTk1pLzRIdFE9?= =?utf-8?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1737;6:18k/kDNptIRD/myocMZkwgQrVAB2FrlL/kc0vdjsBTUCq6Z3Yy0Uocnc5NPb3EeDc4FzOI+PTpHM91BPc6KnT9AvjgcpgD8QBOqxYqVULiDxQFjI8V1SnwooLB6F+VrZXrFJ6JDJli/mlD9uDBhImiqdBApoL+r/IIC5RyDSgwlGL4ZHZYO8WtgCzuwAy6u9UO0crTJU71nmYiCB9u0VRKY90T2mjJqZe9jRDeKVjQX/M6ECjDx3pxPyxCrV0i/S0ah415h9LcbKrG390oWkbKmLIaIlmHtH9zEr1dm7jawaNcSW8WLqJGc5N0OHX3hyTVA7GcUBG5s8pgnc560Ut/o3ZGoz7MQQXxj6LnrXiCHPw5YdqQxYVo/hVcS7LsNayFxI92aMUfets2NeWm4EMkulTW8DoCGRST1X5hKwlpNwAfFVxCCL36S8pGfQP2rE8Z1skO4Xi7jd6yQQK/yV0qWdRN/CF9xjGcxuxBtyTwcFmJ4m3nZwfqDrtgk1HdVEP5gGx2rk0AqjE7u7fp66fQ==;5:Bk0awbp11KbBK/bx6YLvSIYTClEH02PavJUeXi5ksZOH+QydZU744k9hTqBktwWLLp5o19Ce2T6mohItfbbWSmcKXnF652URINzEPk3/Mky0Zz9AAJeIKfHtXSHTRR8po7oruquyV4pnhBv8jCGLdQ==;24:WBMHg8X9Ii8tciI3u+Mp90U+PkvDuG0jYcDd3UWVFDYizqV5lSmfaftcgIohjAd/TCrzPhZZRQBmuFkSLv23qqzgOb8MwveiR2u/5uJ1myo= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1737;7:8k6RUley8aJfZTCf9waZ6iuuawtlQyRE6A+2PInNstIF9prJt/T7v0sO4UuMTeApfBEylqJG85ygC63CrByi3DMyNlNDDTvih5fTFGuEattUIqk+6YxecGV3ay8zBWBtwalFtXNsIdoBmMvj9/o5jtNhfWf+76cg6zL7bX3k/HPHDU++3R6ye8GAiDhI+HtrqWcMlLFekG2/YeATcMal8cIH7Qy6yTWjWpb3/3gNbXwr2vlXTgugsqHnxCiE8knjauodviPBBUmKRKoFTFG+eUN+9AxKLKhiU/OKOLYw/7comGnvdzDvujgcoyOzdk8f7qxySt1GXaDLLLGcpCsuuA==;20:jntB+baL2IQV+i12ei8QRGEpwvzgj8ud1uQq5eyvLAjhtjGvLGLoTgthTuKP5jSEY4PYels+LEl2afu1VIEKM2eUJNzZILd4IP2J/60syQw+TEeYVAmlOiaVzPUvyiBXolDWNcKyu/Es1GDM53BQnh7EOgof5JhIwm1ui/63mGY= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 May 2017 11:13:33.2362 (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 04/25/2017 08:18 PM, Dmitry Safonov wrote: > On 04/14/2017 04:25 PM, Dmitry Safonov wrote: >> CRIU restores application mappings on the same place where they >> were before Checkpoint. That means, that we need to move vDSO >> and sigpage during restore on exactly the same place where >> they were before C/R. >> >> Make mremap() code update mm->context.{sigpage,vdso} pointers >> during VMA move. Sigpage is used for landing after handling >> a signal - if the pointer is not updated during moving, the >> application might crash on any signal after mremap(). >> >> vDSO pointer on ARM32 is used only for setting auxv at this moment, >> update it during mremap() in case of future usage. >> >> Without those updates, current work of CRIU on ARM32 is not reliable. >> Historically, we error Checkpointing if we find vDSO page on ARM32 >> and suggest user to disable CONFIG_VDSO. >> But that's not correct - it goes from x86 where signal processing >> is ended in vDSO blob. For arm32 it's sigpage, which is not disabled >> with `CONFIG_VDSO=n'. >> >> Looks like C/R was working by luck - because userspace on ARM32 at >> this moment always sets SA_RESTORER. >> >> Cc: linux-arm-kernel@lists.infradead.org >> Cc: Russell King >> Cc: Will Deacon >> Cc: Andy Lutomirski >> Cc: Thomas Gleixner >> Cc: Cyrill Gorcunov >> Cc: Pavel Emelyanov >> Cc: Christopher Covington >> Signed-off-by: Dmitry Safonov >> --- >> v2: (buildbot) Fix (unsinged long) to (void*) cast warning. >> >> arch/arm/kernel/process.c | 8 ++++++++ >> arch/arm/kernel/vdso.c | 18 ++++++++++++++++++ >> arch/x86/entry/vdso/vma.c | 3 --- >> mm/mmap.c | 4 ++++ >> 4 files changed, 30 insertions(+), 3 deletions(-) > > Ping? Ping? > >> >> diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c >> index 939e8b58c59d..1e6039cac68d 100644 >> --- a/arch/arm/kernel/process.c >> +++ b/arch/arm/kernel/process.c >> @@ -404,9 +404,17 @@ static unsigned long sigpage_addr(const struct >> mm_struct *mm, >> static struct page *signal_page; >> extern struct page *get_signal_page(void); >> +static int sigpage_mremap(const struct vm_special_mapping *sm, >> + struct vm_area_struct *new_vma) >> +{ >> + current->mm->context.sigpage = new_vma->vm_start; >> + return 0; >> +} >> + >> static const struct vm_special_mapping sigpage_mapping = { >> .name = "[sigpage]", >> .pages = &signal_page, >> + .mremap = sigpage_mremap, >> }; >> int arch_setup_additional_pages(struct linux_binprm *bprm, int >> uses_interp) >> diff --git a/arch/arm/kernel/vdso.c b/arch/arm/kernel/vdso.c >> index 53cf86cf2d1a..a4d6dc0f2427 100644 >> --- a/arch/arm/kernel/vdso.c >> +++ b/arch/arm/kernel/vdso.c >> @@ -54,8 +54,26 @@ 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) >> +{ >> + unsigned long new_size = new_vma->vm_end - new_vma->vm_start; >> + unsigned long vdso_size; >> + >> + /* without VVAR page */ >> + vdso_size = (vdso_total_pages - 1) << PAGE_SHIFT; >> + >> + if (vdso_size != new_size) >> + return -EINVAL; >> + >> + current->mm->context.vdso = new_vma->vm_start; >> + >> + return 0; >> +} >> + >> static struct vm_special_mapping vdso_text_mapping __ro_after_init = { >> .name = "[vdso]", >> + .mremap = vdso_mremap, >> }; >> struct elfinfo { >> diff --git a/arch/x86/entry/vdso/vma.c b/arch/x86/entry/vdso/vma.c >> index 226ca70dc6bd..363730caa60e 100644 >> --- a/arch/x86/entry/vdso/vma.c >> +++ b/arch/x86/entry/vdso/vma.c >> @@ -77,9 +77,6 @@ static int vdso_mremap(const struct >> vm_special_mapping *sm, >> if (image->size != new_size) >> return -EINVAL; >> - if (WARN_ON_ONCE(current->mm != new_vma->vm_mm)) >> - return -EFAULT; >> - >> vdso_fix_landing(image, new_vma); >> current->mm->context.vdso = (void __user *)new_vma->vm_start; >> diff --git a/mm/mmap.c b/mm/mmap.c >> index bfbe8856d134..534aef99cfe9 100644 >> --- a/mm/mmap.c >> +++ b/mm/mmap.c >> @@ -3152,8 +3152,12 @@ static int special_mapping_mremap(struct >> vm_area_struct *new_vma) >> { >> struct vm_special_mapping *sm = new_vma->vm_private_data; >> + if (WARN_ON_ONCE(current->mm != new_vma->vm_mm)) >> + return -EFAULT; >> + >> if (sm->mremap) >> return sm->mremap(sm, new_vma); >> + >> return 0; >> } >> > > -- Dmitry