From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754506AbcH0GyF (ORCPT ); Sat, 27 Aug 2016 02:54:05 -0400 Received: from mail-db5eur01on0093.outbound.protection.outlook.com ([104.47.2.93]:21248 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751277AbcH0GyD (ORCPT ); Sat, 27 Aug 2016 02:54:03 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=dsafonov@virtuozzo.com; From: Dmitry Safonov To: CC: <0x7f454c46@gmail.com>, , , , , , , , , , Dmitry Safonov Subject: [PATCHv3 2/6] x86/vdso: replace calculate_addr in map_vdso() with addr Date: Fri, 26 Aug 2016 20:13:13 +0300 Message-ID: <20160826171317.3944-3-dsafonov@virtuozzo.com> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20160826171317.3944-1-dsafonov@virtuozzo.com> References: <20160826171317.3944-1-dsafonov@virtuozzo.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: VI1PR07CA0045.eurprd07.prod.outlook.com (10.164.94.141) To VI1PR0801MB1741.eurprd08.prod.outlook.com (10.168.67.19) X-MS-Office365-Filtering-Correlation-Id: e61dd678-a6de-4781-7ef1-08d3cdd4a1e6 X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1741;2:5zntG4a4HVuK8lt+xseD/TnynAGDQCy1z/7xgEFLHAvYh4Rq6PE6bKjRCdiaifCA4v/Oh3B8rKVLfeepv28RmjelY2d5q31GkNkm9tqvCBLb+l7taqJ/a4BbCk2WThpemXFulltbvWUyju1OlP23CNPa38kFHZV1i+YBqURqHqJi5X96KaXU9FdLfakykhEM;3:OlJwcX3X11j59RWZ86ymPWV6NVBLKjOoJuSukj14Q1oPf+hB6NLdMWDQJzQzGGL5ApR/W7tUaUNyQWGIVy9Nv9WgG7d8Emuh9NUG2ZjDYMekwlYs6wojcctPGflXsd8q X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:VI1PR0801MB1741; X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1741;25:jrwg2lDPJnGdwEH4yIUlrxDmm3/VLfrrITRxifQo8hXVT6I2yYiSEEqZTrmZstGBgWVawT8ebxSg8eTVjMUwD7j1OjOM42ZTHNL62hBlC20lcidW6erA/MTPzcN8PhoMvY24TJ6SmcUi1JqD2VGim1cZu3nV7RC79NK716ly5MPFhGkhhAbw4Vn6bWctH2UyhVaIDHuRAN8h6SUR4ThmapJuhcqfK4J4vjfI2nJqKJIL8GOG++aU+x7HsRrsH+6gFcGDW//No4vK141a4YtEUX+sSrgBXR8bMeltAdfCJWk6TD10D6sJdbId4CebzL2qEF5F1RP0agubbrlQE1bVgBWN+WIGx2NqyiFBRhbdFctD+i/Umt1Gw+csRPlL0+S+TSm2dYmbFwFV13hVlatRD2Wh+38YmR7nNLD5qOY1wrn52jJDVJtzy4D0S62yJlHZpEJXZ37gtAVURvz1A+T7gfOHyxx8zBBIinuUI9NSMaXSlyPNghWGy5M/fjnOiBlTHrAUvTRoV4fzBvGV/+1skEfchx7kXAXfN21W0dcLUPwgEX81Y1lV/GxoeDxEMeimaZZI4FmNpesd/etMHXb4oWVhlA1uKe83CP7mIQaImuvRdNHBePRifaYA0ab3/RwBrKdIIujxKNhXDEIpcHY1mG1dBes8rEj6wSPAzb0Yu841Qs9XdPzIgAmLw/8rD7nR;31:JzBlOSyy83hxFbFnVEbcE4s6ofOpineS/H7qMRRUvR1wvVvqYGfJlAwPF1P648nZW4pcIYx+fXiTuZhG0CL0VNv7b+tzHzQPYlbzupHHmFFLGjLj2KOSUbhueMqNauNtlZB/gvPuLAub+8QdsJYAvlhxIxLR4Ibz6ejrc19ot+APpD8RTh4Pbl0rpsOKLlRSnaQgkKoQ6s0U6w3s0CM+fidC1uOREHr75tarrZzSbf4= 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:VI1PR0801MB1741;BCL:0;PCL:0;RULEID:;SRVR:VI1PR0801MB1741; X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1741;4:5f0BtQcqVRUmdRR8QGs2iT+VX/gnTNft5Qo889lBHjWKJBMgS9RCjmFwB8muAxpVnmAItdo/gMnur70mBqeXOVsY9PHf3krIIovHX+TfpWbsTwb1bv3aSArs6el3GpvX9E8G0KdzDW5bqli69h0HVdS0kSw2sxx/Pf8zR7xmOqpd24eHaKzxbYskz9Z2KwAJo2rNDcGQnfA7sETRX474a0GfF/CdaQir4BGcgkFpscl0TJUOkdNccoWlL7C0bTIlI80teD3/itwojfnIA70DRNi2FuMtFCTqNHXMVSygE14geV9ogmLqCkMkVT9BryXP3paIkJcXKmC7Ewts1in1Ggc4xelRO5yCU2IwYdPsSrwPA0iKGqhV8BYzKTcdkmUg2JQKUjGpL9HuZKqz61qFww+bP24BZK+/r7eShEiA1RFZTTz/bH5AhIxbWhGqOMz3hB5TogxkoXk/SxCviQrk8Q== X-Forefront-PRVS: 00462943DE X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(7916002)(189002)(199003)(8676002)(68736007)(7736002)(7846002)(81166006)(81156014)(305945005)(76176999)(50226002)(97736004)(101416001)(1076002)(107886002)(110136002)(189998001)(36756003)(42186005)(5660300001)(50986999)(50466002)(48376002)(33646002)(6116002)(3846002)(105586002)(586003)(4001430100002)(47776003)(77096005)(106356001)(2950100001)(229853001)(2351001)(66066001)(2906002)(4326007)(5003940100001)(53416004)(69596002)(86362001)(92566002)(19580395003)(19580405001);DIR:OUT;SFP:1102;SCL:1;SRVR:VI1PR0801MB1741;H:dsafonov.sw.ru;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;VI1PR0801MB1741;23:1jBc/4IVqT18rkFuFZ4ITRQ60LIJ3ig2CzRhVhQ?= =?us-ascii?Q?j2B0im9LzhbeUYe4WkL9uOJrfK8eEEay8TOUerbz6NIA2yCYqi5XHFeBc4Yi?= =?us-ascii?Q?hErP+DE94uDLH/NCJke6vydJmav2gc8xEMDU1scGksGAHjnHIQtf7IVTjN8O?= =?us-ascii?Q?u2WZe1W4IiA628R+7Ecq/C1RivpnHy8a9Vc/gZQcpDxEsM+8shbz+jny5WX1?= =?us-ascii?Q?XCK0rbBbLyL1FeJWDIFO8s3O5XuaP91LWHEg35SlZ3z5U8LJpdznLVw5NZZx?= =?us-ascii?Q?ZpwwQFV0kCQ69l7NDxlTZIlXs1boe6C4hDegf2gQPwKjE/0Lt93JvpW0+/HE?= =?us-ascii?Q?urSjjbe1CA+fKYMGAu0ToBZIM+ITMkdnnaiKe4BfUsz5whsG3nbFsjE4eG17?= =?us-ascii?Q?qYEppSI51QAwBbmgfYyA16rex2gpqnENpPDQaI7jwmetMRA6QfNf0QIDyI9L?= =?us-ascii?Q?DAr5u0R6td/bc8zWiGKigiwxhZWUAI+305RAhuBZ7t/cQsbwWWIjoBLI9wD7?= =?us-ascii?Q?rjcQs4dkNr7ZWvOJR6t/fFgpSA0uSQYqkF72ZdSBWw+98LqNaVj32gK2QY4f?= =?us-ascii?Q?89HqllKDkYil4eNKlgBf1MWSakFvua6B5LmVA5EQCDKAeI27XP/2PEdYuwKl?= =?us-ascii?Q?fOFD3agISeNozfrZqfMLHpR5YRLmzdMJ6ASvL736m8JcJ58tdAtoiv3vKLNf?= =?us-ascii?Q?eqTY4mD8SmVJw4P26/mA6mlUi2QvQ2IOE7mRgWO460OrQHauG9C19ak/1lD6?= =?us-ascii?Q?h6J+JjeSs+obNm1G2ai9txFLOrl0P1PYE3ZBecIMrrECl8QL0zELlKzak9OJ?= =?us-ascii?Q?JNoMEc5vig9wLWD2XYQ+v0k71nDP/O6pkdGtByMWPH7yxO1lAhwwGnq1NwHh?= =?us-ascii?Q?rcb+jdWyqvcMSqula2cRT6wp3abA/IqeTg5hes4V8Iu2h50vK+/4NHMT+/LY?= =?us-ascii?Q?rpx8jINQu6KsPIgDikbrbZ9R29Ljcgo05ju8n1J/UMLk3DezPVNH1BwbFVl3?= =?us-ascii?Q?IM+dWRVFUu3p+PANd+pSy4Y9ldol+mBRS6tUYB0tcsAImcnddQSd5nUBSrmd?= =?us-ascii?Q?B+gjmn8qWf1onBqOVqt/+fkuHJEg4gIPY2cKfgsjLdX/Um5RR/rkkYHifdv+?= =?us-ascii?Q?Ij63YNjtSEUuAVkYo4VL9fici/PTC0elZ/WVKIyCYfr1Ob5WtDgeoCS3sAr8?= =?us-ascii?Q?c/YtA7Xw21Z58MDtf7pV+KS2AD1P1pf4NX4AX?= X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1741;6:tP/bJgDooI+tjubY+xXMhcbGe6wooQHj4WCxdzj1qCvbEVHH+KQc1EVjVY/T+J3Vv4T6BJ8uC///3DyRSyMotoR/PgvQcJLQrLqOc3Po1p6qyPQscnMuSF5vtPae2d4N3+797GUwI9HTLT9Wpjww0OfuK46xrmoWZ6f9VlrbMcdOY508ineXGCJZ8xqc89sDD5/G0vKI/CIb5hBxqjGXBzrBk1BbdOYaHNLEbLuFj3M0SN57LhDHpxLWR83A1EvbSCJq5kJUaO2fb2VxQ0lIGDgVYrme7i4/4ZL6bWg9HO3vVDdG20sbHXB3USZRMOQh;5:7d9tsWeFPFbMqMyNjyB9VHe7KU4UwfUXsKe+Hx3KoiFaJHRYDOq5ApTtL+W6JTtxPc5g9V4KD6hTH/bMuaDzcRCtLv7s2HeyKJP3IdLiTcSTgKsrfGf66ztdq6KqsAMaaXXYZhcY22O6JhVp0Igc2A==;24:rvDtMU3ur2Fjcst1IkWdIXuQTWUhaHcXsOpEtJBpw8uLjUYULumSvviaZR2EQMDg9riAU9dsE4KYC4OsjXDkleXT5IO626ZDISdSCJugMmA=;7:Hao6HEWjP6TmvfBfOSuyuUXJ+iwwZyCsW/FSSd66/3txvMTHBY7N/NMH3rTsHvQKNpuYfEOipfvFooiPpHtHYJfrrGJ5TeD5LzyO50O8rzzsQCLl2xdHEja//HP9ZHqZSUW4zr+QyXNgQO4/4Y5EnoGfLBS9o3W4UXpJ9AFixYzJ8/3Qjqq2dpWKjoM9n7PbEZRdczAa4oZClgkZBFGXDtB0qjssNiTTVJNvx+ODJga9JGsvyWE3PyBsN7K3nE12 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1741;20:CdiR27pBIAJTyRq0oE8TziT6Biqzu/1RJffd+nP1mrb7y6NBQLqYZEm/Fw2lHmmPe8npscCwmUsYIIfahxVYFRpLmHnsqXMrxPIbmnOaA5jO5UKikr07bTe/oGIFFWBcJ9OtnYQC/kiJ/oxne3ZMTv8+QYB3ntL7N+GIwWrZ2WQ= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Aug 2016 17:15:51.2932 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0801MB1741 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