From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932976AbcIENfb (ORCPT ); Mon, 5 Sep 2016 09:35:31 -0400 Received: from mail-db5eur01on0119.outbound.protection.outlook.com ([104.47.2.119]:9632 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754889AbcIENf1 (ORCPT ); Mon, 5 Sep 2016 09:35:27 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=dsafonov@virtuozzo.com; From: Dmitry Safonov To: CC: <0x7f454c46@gmail.com>, , , , , , , , , , Dmitry Safonov Subject: [PATCHv5 2/6] x86/vdso: replace calculate_addr in map_vdso() with addr Date: Mon, 5 Sep 2016 16:33:04 +0300 Message-ID: <20160905133308.28234-3-dsafonov@virtuozzo.com> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20160905133308.28234-1-dsafonov@virtuozzo.com> References: <20160905133308.28234-1-dsafonov@virtuozzo.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: AM3PR03CA038.eurprd03.prod.outlook.com (10.141.191.166) To DB6PR0801MB1733.eurprd08.prod.outlook.com (10.169.226.148) X-MS-Office365-Filtering-Correlation-Id: 1d407e1d-d172-4022-a9f2-08d3d5917cd8 X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1733;2:/SLZpWiLBs8F/Lp1pVqzdPYJg2qj0QyZk0EWPtMMNmiNeWfcehbNRKaR/PDc0aiGFr7MAI8tWfzCwT5JiIBO/ealy9N6MN0P3fEoCWZO92MaVQ+GNLcxJTNYrki0Ef8mtJfPIj4X3YY3IyGX55zyjs7vCqIvluTYD0OUbqjSUcZ5V6IBTJH5v/Ur53MYnOWX;3:emn+bEQI6Rsn7CU1QxG9gSJVmC7x1udb1NrAUwEaBQ7u1WCdjvrZfhHed1/3rXhdQ9L1cEl4yT5nXeT0TNsrBjH35BeOdOle9muJbQDkoJe/2I4G/ZBmkBdrVfcOJybo;25:/4RFSjf/aZVnQC/QEtfG+yimlQtefR83YH+gRKp1qOI2Q7SGJzWAp1NAflycHFpx8rqBcy1CzMWbi9wZkg8+vDexAv5XxBXhKv2b4tthTVS9x0broOyCQaOHMNSaGe7kNWerOZqyrtLkRO3OQGS1xzZCLveSbBsW9DScvX62YGqxBKt3Imzp++UikqixQTpdDnCPMicmqTsKmU1uoN620AHfXU4dpYPaAK4nM2v9Bfv69vpHIPqa8R4ubDan4CzYauJNfjN96kSzlZw4Y4OZo0yXRJXKNJPPsxwZlho2d5FME3ia4gkpEqH4LcAwg5mkdacGBbuWux50aMAIt6ua9YLqAwXazXs91omH1NsP7U51vG16yiHTk1PxFfGvOZYgRbuCV6d03NIqa0PTLvWLNIxMwtp0l4Gdbpw8rii1cvs= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0801MB1733; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1733;31:IJb5Fz0uN/rmPI5WKOQENoIJ1Emn/ZZU94EVpQKtgsoWjoNu0f6xni+Ng3PmMrVFodI2qjAdeOcAkrH8o3nf34crmc8VtvUh4LBAwZo5C2aZotpXZBMc1/eMGu84bmf/skU6yIPV6EPQ5WQmdRYCBAZPnwhaX/YkS3CwlvCM0eEdvsvaAVtZ9Z5MlW4wzteH0DZnkGIRMX9LHlOXYLrRUzIOxsJCg6WvN3x9tsl3sDQ=;4:81KrgvzBOYwzxEqo3Reis5pfuNBrlCg8+LTX2lXnEXV/5Z/vFC2P/nwxFpE8AK1R8TTr+lqpxxMm0hhm3YAF31Z3JLM4m1bEOkPRFjZd8KkEB0fmDe/wwZFtYxv3W2KsuxQThLdv/f0VhuZUhJ9IyRIlXN0nMLT+Qhtgh9Ml8RHapGqWZoM7QExsDrd7JwSw3P98s2DbZqZ6JI9FfUvJCIrfv1kSgrzuDkUvCufiTYBy1F5xIyudrMG0kjyIL1J+N12G6IJuMad7JCotOV81zgq1EZVh8H4z0k19bGPFiVFFITMYdI+oNQoVlcBK6AET0ByjnyKlGcbMGvu5cuatIWbyxCCBAD18990wHXH9FwWwQS4ESJv1w5eycBO6Ve4X9xq0DF3iO2ze0Ovcj0uzMFwMTLf+HQgUr1+kz+R3E+1xMZKkXEWqvTUqo161buJLGSLknnvM/NwH9efGnuz7cw== 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:DB6PR0801MB1733;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0801MB1733; X-Forefront-PRVS: 005671E15D X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(7916002)(199003)(189002)(33646002)(2351001)(50226002)(105586002)(106356001)(76176999)(19580405001)(4326007)(586003)(5003940100001)(189998001)(69596002)(50986999)(2906002)(305945005)(66066001)(1076002)(19580395003)(6116002)(8676002)(48376002)(107886002)(97736004)(3846002)(110136002)(101416001)(86362001)(7846002)(36756003)(77096005)(7736002)(53416004)(81166006)(229853001)(81156014)(50466002)(2950100001)(47776003)(4001430100002)(5660300001)(92566002)(68736007)(42186005);DIR:OUT;SFP:1102;SCL:1;SRVR:DB6PR0801MB1733;H:dsafonov.sw.ru;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DB6PR0801MB1733;23:E7MURzJi9h0SIF8zdBxiO2o4hazyGT8QnkS6FFp?= =?us-ascii?Q?6L3KhvQ+Wv3bAfCWoBfvKSPt2Y10E9WkjUtgh46rxRewE0RWobIC1GJp9XC7?= =?us-ascii?Q?jOxZdUf9LI2Jhxqod/FEVtAJNfqsEy/B3H2KOtpV/gs5XhBep/XLdGoZw09Z?= =?us-ascii?Q?EvAE4jWES5LnSWSnNKWZYTQp6fISYbB1uJ6QnWxNZcfeJxXeqrordm1YRC0a?= =?us-ascii?Q?XlSBFr4IVxvuVQfH6kUr/8EWmB8fMPfh9DW0xIb39BbL2aiNlmJXUUKRt1kQ?= =?us-ascii?Q?y5yYT2kTuPZ55r2g3NQTG5hw62WfttZqBBAbBtzk1nzLtpiaTslJuyrLm18Y?= =?us-ascii?Q?TeRBBdfivfQl9hEWy5ci7emxVmisojbm0KZLXJH+3zXm8lU435xQBZ8U3KAG?= =?us-ascii?Q?z2kJlCmTAm8Ee6MxEnTXgWF4aXnmBfswWitRcEVsG/Pjhs4qsnqzvIQ+4npj?= =?us-ascii?Q?q4k81jDztujuVFRjJfWjUrTFlPRMrqZoUCt2887LG3U7V67XfpHywTBPo61s?= =?us-ascii?Q?TFarBjH6ttvcJt60SCr+NraRvjlJK+5gCD3el1PzfkPvcivzsSgcCV1BklfN?= =?us-ascii?Q?JhjunkRZKQn/KeniRHpNfrdj64tdQgXR4Zmc4VdyfBJw9As4vF2SFlGmtt0W?= =?us-ascii?Q?3JNSp5grvMo7AMGovGc4dMK7uBmLQEADZN2Mc2IOHzgvvAyimuKFXuCn4T6d?= =?us-ascii?Q?QjMD73a0T6IkeZ3CSk+wmPnh/Jd14vt3COd/ZMMz2uVM2+ykWJXvyYRTnysf?= =?us-ascii?Q?Z70eB3+ZBPJyBvOoaPwXfj+yL8/aQzXfxg0ZdSHMisAKFmF+b8YHg7vXYQ39?= =?us-ascii?Q?ElrNnxdOPIexyWKNl21fWZmzdd4GMRI3F1OWz8LjF1EKdrn8RPQ6FJ98xI6k?= =?us-ascii?Q?+nOQbBYDbgX63AEIbFJJsyW8uZ9Hk6ivAhD6AJN+uYYpKqqRvC+VNqDlCwB+?= =?us-ascii?Q?U+hZRnPFwhUwZXImR0kiu9ju9hLB6yTOsgJRe7Vr5XAyz2ZiOmINPxnDdLOI?= =?us-ascii?Q?dj5daTqL81x9ezJHwlTkkSPsTSmVZ5qb4w+yBCcsGaU2N5+ivjeYzkSlxNy/?= =?us-ascii?Q?3wo6BT5rcBKK/g3xPETPTL+8ow8DpyjNYZFD1w1MdmFPlxbO/HlBLB6D4/lc?= =?us-ascii?Q?u/3g02zIpt3nfi8pNJyC4sgFLcQTNXQQrIQ1maUuGI3KiWmm+rwyGyS+F7H/?= =?us-ascii?Q?qKb5+DAvLmpp4daLwnc3297+5gKjpN0HJQ+Y4?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1733;6:cCn6aHRnLAZXQcJAmCTuhYZEBLujQXjPD53FaAJGD+RTKt4m1rugIl7fbQP6D1n1VVqPWcDMdMd03FQDPIeVwqO+gVl7aAtS9vhFMJnida4VG4BaZk4t0K7pm6ecmxVARtXR4pY77ihofw2rofD0Pg2kcKkpUB+xmlS+mBhWjcT3afzdxcPMZ6MguTu/hV4zRjSpWvcjcDpWj6ndPfvjdZWvAKoCBdREt3rzDtf6d3MjBZf0z2GDXzhe77s/xccoihBm6rU47KV5WsGBYEKNF94CwXJrPHEdcVyg5lpD4MdSjqyqVKgsasdaCvcJ8qJy;5:1fhqDkCECQfxj98TYkEhfzzAA+K8POzdTIRs4b8jQbKn+hc+FVG6ixM7Lk/HfM89+GozTf3bIwqzj8m038vUGzQebK2h30S6UXn7/yqt1cfYox6W4k2K8OMS1YaB5VaWxWt6mGjR3jHiqXYugPHydg==;24:7N52/Ulz4uxHEyPqXIhUa55Hf7DGFjZZGAlpxxL5fgh0ut5yuCPIIrjsf51njSdcH7zXCBM6FMNcme2zm1ld6RED9R6rEhvxxRLw15fHoBs=;7:xWSYVmWAW3z+JA6wSgi9MEbtYKggTVH94rT4FWlQe8EAqnWor1YABZhHOHYjUDiSGDspd4rI3dtQQR5niBseDJlmyVT+eCSCDwTJwMj4YOwoZ3mi2vDnbsTMeodtnKmcOree1OCsqF5T3CJBZI7ZMNh3MYmhGB4+pAhFdcSii15JkjF/iwKS+QUXxkmEN0pnMQtISsK9J8RzbQm7hTTeM/MZBnZMlGJPprhMQQ65cJBZYRu4TJkQuBIQbE9S1ZDm SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1733;20:rdzg+QX8OubUM7AlGZqdFZePfYQ9DtfPUmP2THkCz14Dl/4O8Sunv5wLRU6j1u82HeH4PuHCics8l0iforPO/1GVTGzxYmlYPM1TDOc5/0DuQeqX4Dt7DI/aj06M+IxHBW8wwsh+qIheHSk8N/elW83Dj49/wrxoxickv+LFKwQ= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Sep 2016 13:35:22.0631 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1733 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 Acked-by: Andy Lutomirski --- 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