From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935017AbcHaOCB (ORCPT ); Wed, 31 Aug 2016 10:02:01 -0400 Received: from mail-he1eur01on0137.outbound.protection.outlook.com ([104.47.0.137]:54192 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752234AbcHaOBz (ORCPT ); Wed, 31 Aug 2016 10:01:55 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=dsafonov@virtuozzo.com; From: Dmitry Safonov To: CC: <0x7f454c46@gmail.com>, , , , , , , , , , Dmitry Safonov Subject: [PATCHv4 2/6] x86/vdso: replace calculate_addr in map_vdso() with addr Date: Wed, 31 Aug 2016 16:59:32 +0300 Message-ID: <20160831135936.2281-3-dsafonov@virtuozzo.com> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20160831135936.2281-1-dsafonov@virtuozzo.com> References: <20160831135936.2281-1-dsafonov@virtuozzo.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: AMSPR04CA0049.eurprd04.prod.outlook.com (10.242.87.167) To HE1PR0801MB1737.eurprd08.prod.outlook.com (10.168.149.149) X-MS-Office365-Filtering-Correlation-Id: bebdac39-edd3-48a9-e6cd-08d3d1a75bd8 X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1737;2:XCq/abUKmx85K+IQe1irpZTRDauixpa27Ud4+sIy5ULAQ5xqOv522VA1i80p5PlIUZrkv9O3fQ8j7VvCh68rQhvtfXgsPOJi6zKZCvIcxnI6O9vfYPCQa2GegcaHv5uHoTaHfjKYmqptZ4fDHj0ZxCdktEOMhXc2a2+9QGxJMw2P3kfSTVcbXb1Oqh/xSP+0;3:Ka/++bvNUgKaIOJ866j7FaX6fcVuSQfxSwWyySjMZ+9IKzGq37xLkQkrA9GuWEcXFJFShpHHP5XSSabMfdJntklMah1zNe8qMIm+zGl5pJVczhbRMSRzkExaEF2srKtL X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0801MB1737; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1737;25:BpIzx41An0vFYwsGNZqSl9YUhsDyHlsWRELZSUlu2g86NH4e7pqspVyRehFhqn+34fgnJsbqqX9hbkn2uqYSS/ai2QQ6JACNOufQjVEsVfbZppe8CfkPhoJa4LzGc6/FdrauFy8e+xAP7OhqWa1aXy2+DQe25/U7G5VAOjKh2Kj+zYvvl01Y7tWsMKdedio4r6OMy7ow7d5ZtfuiWjWbaYACleo/+gZLyoDXWxFEw6xE+xVRL0Yv2doL91/l9X9Vg3gaX31MjxNbbJ5m20VxO+OupE8vvBuwl2BWtHPBkWf33HmmPnHw2eCMCBOGKIxp7GLAdgkNTO1z2L/ydppic0gS2H7IubaHB47CV8Sf82OEDj9eD5a0fv+zwEth+VQV8/nwZYCqRlFAp11ju/tYr6IBLeQEZ5GMiZOkbEZZlBoqhhZJgpK6yQrFEYFMsyypQsba7Y72RtlVqkw8UQj4LJFwUQMuErba/sQifLREU+GVE3ahLg96P/B9zZw/2SR1g2X6+b/FHVtpnNMFympP4vdqCHJuXmxMoERoFD33ozJO38qadkrUjQ/0eYS2IleGp7Q8Z8gyIEQYCocAD3DRr/44iCMF1YNqaNlKCkeCzAMpHBVk+NokIcwuU27HBpK0WzoOlCJ0e99aWWapVKQZ1KXfFaL9utrvBZMLo4XZ9i221l8J9WNCZPof4JjI0c+f;31:EmQ4uRoqS92q0UwLZkptmdr3bd+lKjdbuxUQCSB5Qyf94RaxRRlLzZo7GlwUixJjT3bzr/dDzDmBARVl/bpWR8sD8FATS+LdJAjCI9xEBz68co05ivhTzRA+zq+rgB1jYAx2UXGx266/aAbOXdBblhrbmm3tmL7QqcHxZY9SH2IVoNBV5ibma5yKx0p93AEiD5L1uCe5Naz4z1UOxEH0fSvTg2V5TNOx+iZEgrUhEXo= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(788757137089); 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:tF2z3UkVd7Icc2iz7wB4VUlvpr1lX/J2R2DY5VUq7XK5ZXHLfRzhFD3mMMn5B4TRt0iYUdz9MUGkAifm2cYylgN1xdhg3vLOTQbXMs9hlGJfbBHr2T/ufYemlJkXYNqCMTHgBGgLM2uFK/LWKR/XCAmZ1HFk2xx+n6Xiwi91pLUDqZjb81b0we4afkvSVvNA1wx9AQiHXulXo3rLxYb3k60nZREa+fho5r8J02KppYr0kbv8M+n2cbI5TQJrymcxo7fzEZr+kktCiPifZC5VryzYlYeTimazHUi3+U5HJYyReH4ClcQwxOX9hJmI445bUU+sxdQImjW6MckRIn3hqr+StN2fFReqv/3bvSMgYP/vBdy9QquuIE1YiuivZ5NFpX6eQCiHis8GgLQ6/ut7dp3NxOKWU4IUNsr1TI+0/9wpEneaGQS8YGTgwVJFzQSoKyRvHpYhG9Brm9vMHEPhtw== X-Forefront-PRVS: 00514A2FE6 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(7916002)(189002)(199003)(5003940100001)(92566002)(3846002)(1076002)(6116002)(36756003)(101416001)(105586002)(106356001)(2950100001)(586003)(97736004)(50226002)(50986999)(68736007)(76176999)(2906002)(4326007)(42186005)(19580395003)(4001430100002)(66066001)(53416004)(47776003)(7736002)(69596002)(7846002)(81166006)(81156014)(305945005)(86362001)(8676002)(107886002)(2351001)(110136002)(189998001)(19580405001)(50466002)(229853001)(33646002)(5660300001)(48376002)(77096005);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0801MB1737;H:dsafonov.sw.ru;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;HE1PR0801MB1737;23:kjihv8RruuD2Kr9MWksj4Ekh7MKRVZzSKLvpCNE?= =?us-ascii?Q?P2A9a7BxycETcN210NUDqYkEeb0YyImJWb02Shm3AH7RaM/6vHSxP/sy1Jef?= =?us-ascii?Q?kEkxpseGzcFRSldLt+UAOWYzKlP/vNESdaJqbYiCLSvdKeNuBAGJT45IlovE?= =?us-ascii?Q?0hHcJr2f349QnN1/srjpVDz+fWmRnOHK+HHqX8Lnz73LZn+no9hM/eLZIdzm?= =?us-ascii?Q?EnuHwtliyZZcdiFlGeB6hLFU6adVgnGuF/xtss3O2pQInXmCVM/chtBzO0ga?= =?us-ascii?Q?lpRfWXjsatwbkPeLxReUnkCfBpMm76sanOFKKqB/Lp2SDV1GyFtcXkWxxYPV?= =?us-ascii?Q?Pv+rwEcQFOFirFNnPOPN+Q9yIYvEu1FAu4x7Xp9CbFGUf6f1W8+2EacdqaSV?= =?us-ascii?Q?6/A1LgUdYou9GRIM6ZBtK9Onc8QCzchEQcDurv4hRGWa4jumo6F56LAB0f/H?= =?us-ascii?Q?uClGtRwaljh7Nqx2qJd+WKCgD5j7MdE7qP3A4ko3WO0zTv2vzQEpnydsmi1M?= =?us-ascii?Q?kl7GXYHKSNkhf9XmZ1Emc97DWt/5y0v87hBVaGG7xpmyC4pIk2RZAMry5pra?= =?us-ascii?Q?AWt87iJZRR0omRnb99XRBmf7R989259lVI7nPy3gS4gwuWn+1ksQPZCCXdcW?= =?us-ascii?Q?89oot/Kr0U0qqw59vsRaq35i6PCiamJ3XDOYIN/7GAeecizpSxTlxKbG0THx?= =?us-ascii?Q?+cZ9YfXxfZitMRiDRguryTrRVyA6EXPgb5EC2BxE0Kp8aqb4x8HNyorg01Uq?= =?us-ascii?Q?sxeh74OhtWtRvY+qzNo2ObGjTjTlUYedI4BbIYMTKIcXHhseAFBUtf1r9AgG?= =?us-ascii?Q?Q1LtCmHbpZ+jeuF9WEsxXc288jCacjpqm7hWIOFcgMiJMh0dmBDbH0LPaa2L?= =?us-ascii?Q?TSEXpsO+Cr+yjv/2sNX0PCGxfsYXKFsJnz48L2MQY/sLD5237ItJUNQdqp+8?= =?us-ascii?Q?qQ66TBIKquZ2bXonmRfv8v3En7SrDYAg7WAoxCNruiauYwW0VIflLPveSJiw?= =?us-ascii?Q?tvbcdPUP2e8WUCUKmdPEsLmJ2IAbgYgmEaqyVtLvgYIzCUKkAnO7l+mMl5IJ?= =?us-ascii?Q?BDDvS727zlilvdvJdIl9TBiwPso9ZOBC360Ay8pOuJ1sitTt1fGN+nkN2zR2?= =?us-ascii?Q?f3t28KUyM6WQxHUVwSJTeuBd8YmaCfNi4bK9WCJ6uXmUj1mgO/JcrAoMWU8X?= =?us-ascii?Q?FqEy1N1SlHsJ/4PUbQ9d+zhVGOrZktEumWwgS?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1737;6:u25nHXc0c8x3jH/FEqlCqSwy2LLTAXlzadj7tOpI8E4YMVfeTOIQYb+48pPD5iIHc/o7D3roWR5la86OyMLiGSEgyTv2mXH1s9iqqbFQkg3O3MHDNwFIVOea4QiL25uMrb3GX9dC55G2iYP+5Og3Vo39ZH6kfJpjBzubEg45hOysDW99I01NtcNTIjtm1cSG9fGIuT78DpCK/2wxEsw8i3zX++Ykshy7xiORTtGk38KdtSBOA2s+40kk9W2UNoxysT9NjCf8Q4SAetEWSBS0DzoaL2sMcRRW+/8UmkcLMeEdLcwOn4mU2GQ5eTu9cy28;5:VCfNXl6GIRIul72nUDEO/NmFgUmYJ6hVSUDqXDf/Mm3O3NwnCf2R8qWohrCGCmCdd6Bvzqcai5SSY+y5aeo53lbnswKISvhVlTqVOgc7SPtFx1PBgBEVQag7YIoq6i0AQP38cukQtBkJwXJANNSAwA==;24:PQBwhIeN9ffCteV5not9iDEtoV6qAes7sh+A7L9fyIXWdnQzg5UHoTCWCazDI0carmvncJAhrWrZVTxsNvh/j1Dbz6wrrSEecMOfABimbWA=;7:HDUDYOKAaar/0ZNF5y3uEfVs9dN6NouFhDuvzc5qeDmAlILH3hjfa4pWVGoA7Or6CC8CNKy1BPbXd+/hluF8ipgZ+VQ0kowA2No7DD1X7Vmg4pUDV2UaAMtM8wMno0bNDRMV73geiCsvVZNlpUws6DqW7uddMeVwlnOekJgC9IqxDVovLBDqRNcrPTSlIRUxMANBPpD+yv6HBSfzoGEo5D0EOkJAw+/I7XLnJPhBhWQ8j16kujE8V9T9Bw9KjRU7 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1737;20:SoRzJ7ut+HKtQCJYKUGukHlxZOtRF4CimvZOsaGrzt91qjInGL4k62TUUKC8eF3GHhyUV3x6EHK07W3d8p4exwfJusaLjfPGy2mfAc18a9EXtfgMj7R7hSBld8zQJE6VT+IfikNojKW0qXk6SixczDjHKzn2Vg7yRVwTH3O0CnE= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Aug 2016 14:01:50.9878 (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 That will allow to specify address where to map vDSO blob. For the randomized vDSO mappings introduce map_vdso_randomized() which will simplify calls to map_vdso. 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 | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/arch/x86/entry/vdso/vma.c b/arch/x86/entry/vdso/vma.c index 3bab6ba3ffc5..5bcb25a9e573 100644 --- a/arch/x86/entry/vdso/vma.c +++ b/arch/x86/entry/vdso/vma.c @@ -176,11 +176,16 @@ static int vvar_fault(const struct vm_special_mapping *sm, return VM_FAULT_SIGBUS; } -static int map_vdso(const struct vdso_image *image, bool calculate_addr) +/* + * Add vdso and vvar mappings to current process. + * @image - blob to map + * @addr - request a specific address (zero to map at free addr) + */ +static int map_vdso(const struct vdso_image *image, unsigned long addr) { struct mm_struct *mm = current->mm; struct vm_area_struct *vma; - unsigned long addr, text_start; + unsigned long text_start; int ret = 0; static const struct vm_special_mapping vdso_mapping = { @@ -193,13 +198,6 @@ static int map_vdso(const struct vdso_image *image, bool calculate_addr) .fault = vvar_fault, }; - if (calculate_addr) { - addr = vdso_addr(current->mm->start_stack, - image->size - image->sym_vvar_start); - } else { - addr = 0; - } - if (down_write_killable(&mm->mmap_sem)) return -EINTR; @@ -251,13 +249,20 @@ up_fail: return ret; } +static int map_vdso_randomized(const struct vdso_image *image) +{ + unsigned long addr = vdso_addr(current->mm->start_stack, + image->size - image->sym_vvar_start); + return map_vdso(image, addr); +} + #if defined(CONFIG_X86_32) || defined(CONFIG_IA32_EMULATION) static int load_vdso32(void) { if (vdso32_enabled != 1) /* Other values all mean "disabled" */ return 0; - return map_vdso(&vdso_image_32, false); + return map_vdso(&vdso_image_32, 0); } #endif @@ -267,7 +272,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) if (!vdso64_enabled) return 0; - return map_vdso(&vdso_image_64, true); + return map_vdso_randomized(&vdso_image_64); } #ifdef CONFIG_COMPAT @@ -278,8 +283,7 @@ int compat_arch_setup_additional_pages(struct linux_binprm *bprm, if (test_thread_flag(TIF_X32)) { if (!vdso64_enabled) return 0; - - return map_vdso(&vdso_image_x32, true); + return map_vdso_randomized(&vdso_image_x32); } #endif #ifdef CONFIG_IA32_EMULATION -- 2.9.0