Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1952005AbdDYRWx (ORCPT ); Tue, 25 Apr 2017 13:22:53 -0400 Received: from mail-eopbgr00125.outbound.protection.outlook.com ([40.107.0.125]:20502 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1951939AbdDYRWf (ORCPT ); Tue, 25 Apr 2017 13:22:35 -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 To: Russell King , Will Deacon CC: , <0x7f454c46@gmail.com>, References: <20170414132529.8337-1-dsafonov@virtuozzo.com> From: Dmitry Safonov Message-ID: <871579ef-ee9a-c321-80e4-47836bb0e472@virtuozzo.com> Date: Tue, 25 Apr 2017 20:18:17 +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: <20170414132529.8337-1-dsafonov@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: VI1PR06CA0027.eurprd06.prod.outlook.com (10.162.116.165) To DB6PR0801MB1735.eurprd08.prod.outlook.com (10.169.226.150) X-MS-Office365-Filtering-Correlation-Id: ef1ee225-3063-4588-3721-08d48bffa54e X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:DB6PR0801MB1735; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1735;3:8I9Vkk1Dhmxb2/fSAhiEnxa4pbvteKlbbgg+54DhFQ8rB8KHXKE+X5HRTZTiql0pPVv9peS2AHKWbcrUcqqhp+slkSJO+ORJwHzKd8OmJqC2zhsLpA1OISiZvxIgk2GODH3f17e1IxSlJhrP2oPJRj7mhUb9nOWQb46LbdgvpNOggU6i2m097ggGw1C3y3wCOtwBzVzZsW25b1fn3f8kz2f+Q+G/R7FCqtzDncymq93sJGZwY3L5hsOxS8Gs90nRMuNvuy+7CHu0UWonuCGFSv8zkhzWFL9Fmk+xgaHTxAHopMYEfTmhqjGeRk0gou+XZukVpUKadhL3yTQ3R5TB8Q==;25:Fd12de5QM4PcfjewKeHXmnk3eng9Qkgn/+EDYvpyTmjx/KbGHL+RwIDdOEGlSO0FWPU5ZyRMIRQ8qNKMowfuyKDjIVMI2KFTSM2l8z+UHYo7MXSbMpinzrhED2BdddSCaQczN8cHc8oVw48abE7NdG3DPebUCyE13RcFnmUfsRIaHy6QmyjpJBNEpXbAJ8xryu8f5WkvtOZdZY2trtlRiMT/jhEiY/zWPtPsZek4yePkrBdBRRIzqraFUS0jLpWk9VF4pWzpZcnhFINtBVEosgoKK/LrkGyRudoW66NEXfXZA7LWr6cdwi5hORI4Dz3cj6Z0OdWCON5HQyAduDIxekwFybedvwlrSly8bfwLVvc8DRw3Vi4ROBdEzv3tYZeIsSyL5ecw3iy+yTS/PTq2M3+Dc2Y8QdD5gVsbaRv5lutIVUiS7vS+2S7xlVeDya9YaGABlqECXxJIZCzdja1DPQ== X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1735;31:7ewHwwYarpDpDtZ1YKJMoMuDGj4uheCtaOcKU9Dt0Dt1R4qa6mtOrAk5Gr5tTBPMlNf22YSYFBLNTE9kxW5Zn/DQYapXkss7Svkn8J88LrgNKVKt973ZdpR3iD6WIouOS5feu53ZRGkHjZZc3pyOFFhqkH/wm96hTatayK1pCAAkCJXW1IVFhV6kUKuKHtZl/4vOiEb3+ho+H7EQcFOcdTkuqjmLmeUAqbajqr67juA=;20:9o5UuUu3i1MvtoG6qBhFMej1zYDlkK4qSmx4cDvsyl+kYeynItcdm6fg8Pdct8kYu6aZjMpRE/69JlYJwd/YY3gb0JnLWB+rm+HEam4WPgcVO1g6Vuqv39iwbExgJzGSVF44tjzsRsvQ52dsUgW8DbzSHKfbCJUMwdIGobpCUQ+FDFhI5vEHzE1XX+HzLj0gYOyFtt32EfBoHEOVRmtHMj+asJOv087gpp2i5YB1wQxcyacRRsofZmaFk5k1QkamzoHOy+r+LGq/jhIAO4aYb/ppNVloiRt8No7AJdEmId1+SsSOXJtrb+1gHfwnU5Mhq3tSqhzD4ac81yEFKx/vdtvP+1lG07elQGyrjA/1f0WdGXTx+lhwUSR/gf+nrCwd1ZNvAB5afhgtLnPbR9YryptGohDo6TuAG3pzM3AppHg= 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)(8121501046)(5005006)(93006095)(93001095)(3002001)(10201501046)(6041248)(20161123560025)(20161123555025)(20161123564025)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(6072148);SRVR:DB6PR0801MB1735;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0801MB1735; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1735;4:+i6rWHKTmz+qgdpyXAJZfj+RhIEjklmduWg/3QQetrv8bthn3IOkx6uWa7Wa5fjXDCFE5oDPJFUga/bDXOkpEu16KmCYyy8ilCUMUlPSPtlYj8YoPcxSELOooKsCUfzKON6jAv0aY+UbBg/9DGhDj+jpUgYlyqEI35OnkAoUr8wDNbmaZEREbMJwdCAtq1KIbLDvvZeWjHxHguCveONJrzupyKW7iK2ALqakWvaCOwjE9VEch/K7QMcpSCXCBER1PrFILk5SLRLyht2NO9SOLSdXvXzwKF92PW1mcP6Pa1GXgN7FwPJKzYSk8jylB4WQR3NDQ6do0BgM5zEVfuGbKlgCtpbp4ZzYzptVmyRJwQrr0pwM6In+xLcYdxWK5Vvehw4bn6wRUgZ+Yk2eawdeySK4KS2rhxe2zvb3Q670Hjvekqh07E73YSiNRMURtqkpUhPpy0KOOrzxK3pXW551YQZmevo9ExrNvdXKFuXj86aUbi7V3oO157lXsjPw8QtNHK1fRaqfBGs1zkU7hB0hqJEGc+gzVTlSZfqr9pkWX6LYaVyS8OhH/Oz5zcl90YxFpEC2UCFaoZE6ihZTpo3Td6Qpa+dM6Exdo/pv/RfySTAjOJiBCvmdtGsrRYy9TyV/K/3XU8H9RNGUjNwtjuol2ZFSL3EzZiF+MfhJOIwfeNmayo9c3XiNKt8Us4+GBofwdf+xtUfW3i/v0Ss01pJyvCf/XPY6W6n3zdqoNfUygUFKLyv6ieb8iguHr85pQDuqSe2vPXbfI8ahqMD9DBVNShZbK7mMFheVEtNp2ysDCF8= X-Forefront-PRVS: 0288CD37D9 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6049001)(6009001)(39410400002)(39400400002)(39840400002)(39450400003)(24454002)(377454003)(25786009)(6116002)(36756003)(53936002)(6246003)(4001350100001)(2906002)(4326008)(189998001)(53546009)(7736002)(31686004)(3846002)(65826007)(8676002)(23676002)(83506001)(5660300001)(575784001)(66066001)(65956001)(38730400002)(6666003)(81166006)(2950100002)(86362001)(64126003)(47776003)(230700001)(6486002)(90366009)(31696002)(42186005)(76176999)(33646002)(77096006)(54906002)(50986999)(229853002)(305945005)(54356999)(50466002);DIR:OUT;SFP:1102;SCL:1;SRVR:DB6PR0801MB1735;H:[172.16.24.230];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtEQjZQUjA4MDFNQjE3MzU7MjM6ZFpycnVPU0dFd3RqQnNHZ0RZTmVRdkxS?= =?utf-8?B?RUF0SFpXSDhmUStVNU5IRlRMSzNrMk5PSjNlbmM5S0N5Ri96a1BtM1N4aWVt?= =?utf-8?B?ZFdGT2N2cVhHV0pWcFhWNEFmc01BejhORlJFTmM1Mmo4ZUZocVBodTVBc0RZ?= =?utf-8?B?azRjS01RTk5LV3hrRkxPWmFQQTV3SmF2WEhyOHRXdzdzNTA2WXF3WWJ0SmxM?= =?utf-8?B?a1JVNEdGdUVHMVV4RDlMcWIzdWdDUVh1SUFmU1JyYmJGVWtiWHg0b29iQVJF?= =?utf-8?B?Yy9vZjFRZkRtWnZXQkpWK2FRUHlBaC8zYXRjdU1FLzl0L0ZCVzNMZDNNYmhC?= =?utf-8?B?YUlqaC9TSHArTVNyTmhyT2hGcnJ0cURaOW9Ud2FScWF6cXhKYWV5ZmFVajhn?= =?utf-8?B?bEw4R1NDTGpvSUlDOWs4UjY5RmYxcmlBUXBFTU5tOTNUTDM3d1VRa1RWckZD?= =?utf-8?B?TDE0cnp1anpFTXNkcktHWmczU3pFU0QvRzlCOGFtZ09wNUtvdXBTTUp6aXpy?= =?utf-8?B?MFFzeXE1TWVJYW5aaXJnS1lUN0daeVYxb2Naa3I5UFprR3M3ZGt1dFVVZ3Jh?= =?utf-8?B?U0hSUnFuQitRb016aUtHOUhJcHRiV2ZiU2ZSTnZoMXo3d3Fhd00yandCcFlK?= =?utf-8?B?aTFoMEFRSTY4eDNIR0Rha0ZjMWpzY2ZvVE54WG9DZFEyQUdnQVF6UnlKMnFv?= =?utf-8?B?c0NuQ3F5YUJZeVVsbnVJMHNmVW9XZ21wZnI3OHM3VXp2QjFiVldGMzl2b0RJ?= =?utf-8?B?ODlEcHdHaVA0bWtVRVVYTDMyVE1LeUJ1U1F1elZkNGY5UVc4WllOWDZkalYw?= =?utf-8?B?dVdkTTFkNUtLaWE3R20zL1cxRDEvS280OXRYR2p0cy9kNDlTY2JKeXlEcUEw?= =?utf-8?B?OGwyTit4SWw1R2Zuci9wZmo2b2ZJYXl6YXNGYlh2Q0lmSmJaR3JYenJ4TmJX?= =?utf-8?B?UkRBYzVaMG4vQURtT2xPTXdKeDRFWVNrNTVPL1lYc3B4VXlWNHlYazlYWUJT?= =?utf-8?B?ZE9FamUvazBIMHQ2cmgrR1daVEU0d3ozZlhBY2RiTEFuS04zQUE3aFl0MHdu?= =?utf-8?B?aldmVkVOQXFGdDd5YUtpWkVYL2NEMUdWN0ZYYWxJN1RKU0xaSkt3c3VhQ2U3?= =?utf-8?B?dGRFV3JVejBVbURaN21MRkExWUlkay9DNWYwcmZiODdWNlhMUStrY0toclFJ?= =?utf-8?B?bHByT0pOT0Z2MERnbFo1a3FMNnBOaGsyaUVkNmUvTHlLR0hqK0RmK3M0MTBX?= =?utf-8?B?T2Vpdmd4eG4zY3UrUnBOWm1xWWx3eGVCVlpPOXNVZWFuSVhaTXlmUUFKcUN1?= =?utf-8?B?aDRQQ0RIMHczaENzRUEva1N2YzkySkh3Z3JDREpuaUtibGc1bkZscldkUDR2?= =?utf-8?B?aEk3OVM4Qll3eEZoOXBFbXRaRkZ5ZnJFdlk3NzQ2OGEveDVUTGJVSXc4UmQy?= =?utf-8?B?cWxUcExKM2Nyc085N3NuWmMyakNaK2xhZ1U2TUFmYkhtS3ZNa1pWR2VvenZk?= =?utf-8?B?d3F0QUFGcUtScGx0d05uankrVnRjK2xibWlscGdrN2tEVGthRnhjZ3VSTFZ5?= =?utf-8?B?azVnQzI4Yk43SVV2ZnFtTGNxa1ViamJyejd6aE45c1RHOUJyVXZkRlUrQjNU?= =?utf-8?B?aDdHQ2FBNVRQejhpU1dRZGpKbHNzdlc0aWtLUHkwdDBHZTNTeTdkdk9pM25r?= =?utf-8?Q?ssdaVtOdH0WFoJrZHWd5Q8k0HTX2Ey+UFDMr1vS1H?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1735;6:I7nw5ZN3PwjmKCFh83gS1npSCx3p53VXwEObe6cxgtuyBqaYdC0zkBXl+5ETbI8AipTyi5IJrFVj1kxpxREEDiNAg0mmDKyIE/kSUheuPipCgeSfJM2uTckYhGuVeg7QeIH+Odxpl/VNDD3L7iWKl/Y33U2N36AEgCIOynIl+h+XZw/qLfMA1T0SF9fs+oxesfcQyP544yBJ0ouko+FzCdNGfHh6pF108anvwlHFpdW21OAvdvRhABt04O3OIsPu8n2jClfdSwXsHP4qdNaV0T9ZkRDyKqa+LwVW7osTPCSEfbNu/D5Eo3kWPfaDUDndK8GkhhmhHZdPk9ysWbXrwT6hi4qVXFf/ft8VpAK8GKDtQ6+eupQFSpM9gNTZJn1bx4rlUgz7nezUwmf9R3mJMyaTpVYgWd4Xrgk83sxwkbRJnUqDRlK/3CwxZRFcqLwn7EjEpwRYs+375enZkMAfQc+TLnEgQZFGV1XgclEak9iL1mYj7dg5b+7uputP6Qv9cOq2oKOG97A/WhgDcsJcFQ==;5:o5tovLpwk5Bz+6+NUqbyb4LcipmEVLplU0fyXWUOnoOfF1h7Wf1YT0cWIYGtWj3ZPxyBQ84fy8XLMAHzCWxaLfhvTtJC1LtBuxeRHayD1/ADhLTLa4HSUkqXNVwJU5dHo2QSoxmDrakrj9sMvd7Qdw==;24:NgnU/Ed+l4NyCIHUp5B3JOjjZjGwTx2CkPMv+/v6GaaigbXzOxcyrFbTorUspEreUt+TDWrlb553d1PXKQCTOLVLIMDwjGrwYT9679Z88qU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1735;7:qSgSsYPulyCHXLqXEtKqE3hHvlOchG1rf4Zmq65RCdgwQ9s78fHUz+vWEoat/d7uHnxkGivRAwuk8SGSl/dE5CJfe3J4e8MVQHSNwkMN2h3MJPgvDMmyfK6wvenqgcpSLBWLDLbypccQlGZ/+mPNUT2k3T3wcpJbrk7b9xyGMmu8AAYVaPgETpvUhwxZSWOg4wnT+znZ8QM5IlOHggtkJuGzyVXf+qmuFpFG7AjV8GCdq1RhHjZtYBRidrX6bDMqsLRUXB21XLPJSN2CL+Nxo3conWJLxdHVaGETwwFmizzh6kd/pTuV2406e7XE+Jk/t7qlzWIJfLVtAx7gGvYaFA==;20:2ruJnZx5sws1jtvd759pQvVO7CiJbLO0cn5lRx5lfP35FrccL/+sTTCYD0aVpwgShBfZmmkXKX5lEjEzn0F9bba6ilG0FkZnN5oDc7t2GOw4NwCfMrlLw/SFT1NRg3xOG6Sp3NdAY5L6HrawT5lApNaDLEE2crwhEyxxWGVkxu8= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Apr 2017 17:22:26.0430 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1735 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4455 Lines: 134 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? > > 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