From patchwork Wed Oct 4 21:19:58 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Garnier X-Patchwork-Id: 9985537 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 7861E60586 for ; Wed, 4 Oct 2017 21:23:13 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 68D5728C2C for ; Wed, 4 Oct 2017 21:23:13 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5C80F28C2F; Wed, 4 Oct 2017 21:23:13 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.1 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, RCVD_IN_DNSWL_MED, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 27DEB28C2E for ; Wed, 4 Oct 2017 21:23:12 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dzr6h-0003R6-NC; Wed, 04 Oct 2017 21:21:31 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dzr6g-0003Mt-61 for xen-devel@lists.xenproject.org; Wed, 04 Oct 2017 21:21:30 +0000 Received: from [85.158.139.211] by server-10.bemta-5.messagelabs.com id 98/B0-00743-9D055D95; Wed, 04 Oct 2017 21:21:29 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrEIsWRWlGSWpSXmKPExsXiVRtsoHsj4Gq kwZnVchbft0xmcmD0OPzhCksAYxRrZl5SfkUCa8aXB6eYC96pVMz+9ouxgXGDfBcjF4eQwAxG iQMfZ7CBOCwCr1gkFq6+wdLFyMkhIdDPKvH9hSaEnSUx+fJyRgg7TeLppXfMEHaVxNKvn1lBb CEBJYmtG5YyQ9h/GSW+/xUFsdkEtCT2NMxnAlkgIjBLROLW6x6wbcwCZ5gkjvedBOsWFgiR6O p+xARiswioSpx++o69i5GDg1fAUqJvaiHEMhOJh0eugZVzAoWPnHgDtcxCovXMfaYJjIILGBl WMWoUpxaVpRbpGlnoJRVlpmeU5CZm5ugaGpjq5aYWFyemp+YkJhXrJefnbmIEhlw9AwPjDsa+ VX6HGCU5mJREeTf5Xo0U4kvKT6nMSCzOiC8qzUktPsQow8GhJMHLCQxhIcGi1PTUirTMHGDww 6QlOHiURHgn+wOleYsLEnOLM9MhUqcYjTn27bn1h4mj4+bdP0xCLHn5ealS4rybQUoFQEozSv PgBsGi8hKjrJQwLyMDA4MQT0FqUW5mCar8K0ZxDkYlYd4HIFN4MvNK4Pa9AjqFCeiUOU1XQE4 pSURISTUwirXdaKppyOm+esrx95d5XSb1fBbKB61OTZpxeO1FrrevrHRvvtRduqL0WIeKel8w j61Wi/n/F7NUrEVuK+dr/1M8pnNqgqvS1JqWw6XLu42nr/fwznTb/LrnisfK7Ak/Hi/Wsqm22 rGAc13x/N1W7swzCvxmHtxup7+k88Ev3yCmWyVt17walFiKMxINtZiLihMBDBp4qcUCAAA= X-Env-Sender: thgarnie@google.com X-Msg-Ref: server-12.tower-206.messagelabs.com!1507152087!78325778!1 X-Originating-IP: [74.125.83.48] X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG, UPPERCASE_25_50 X-StarScan-Received: X-StarScan-Version: 9.4.45; banners=-,-,- X-VirusChecked: Checked Received: (qmail 29570 invoked from network); 4 Oct 2017 21:21:28 -0000 Received: from mail-pg0-f48.google.com (HELO mail-pg0-f48.google.com) (74.125.83.48) by server-12.tower-206.messagelabs.com with AES128-GCM-SHA256 encrypted SMTP; 4 Oct 2017 21:21:28 -0000 Received: by mail-pg0-f48.google.com with SMTP id i195so7166018pgd.9 for ; Wed, 04 Oct 2017 14:21:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=M9f4NDrv7fUm/LCLAfthEFQztVYNMnf6Jdc+veekX7Q=; b=alB5ItaYEVOnR4eD+1C23295XkkI6+Qfa6z12nBESygGXRKJrBoWSdbtvVEsemTrUC Jy5mf4SQd3d46GSetFzSSwaYwlAFeG3ENmXC8TonBwvNrP7C3cbyQe01OOO7wcMOJ7dF QTsKHAb+iwhGCYxrvOJy6K8wSr63XDykKSeTpdHY8JFx2YX53DHYRx1LPnauBbuRJj5X KihFAcMEeyjw0465qVhaXR19Ertit0zAJWYIKscmEasNzXGub27Nj5izNVJYEbDPO+b3 R8h+1MXW1RSHBK7MvOvJz2HWTYMHAQw4nd5eOUURIduxlaNjwNcNyS384n/FbBnU/Gp2 Sbng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=M9f4NDrv7fUm/LCLAfthEFQztVYNMnf6Jdc+veekX7Q=; b=j1Zz9UuOifOCyixYrrVG0uop8BI9YWPg+VfO3wQ79rKeXO5/fUSFNVj+w+Ngd+QM/F HCU6SMJ3t8hiL1Rx5QkaIOB43/UhJbyUV58od3fLlqhyijhPc+LVX8e+0ARn1E3Cn/Sx mtf4xwvuAni17RhttbZKkTJ5H+WfAywXwA0F0CyHl8da1EdcybFDtCkTzZ+nVg8tSxeD p6ZqfvTOsPH+6EZWnaaDwdHjEOZsZ4LYSWOnoSgWJjzXrjKUaG0we/S8Ij3cj2fMO4ug IaAHW3zq0ayiFR2F71kUrtTSOerA9xTi2XBJQAltwB4ibLIwnfKxk6MTiUQApVB6H35L VFhw== X-Gm-Message-State: AMCzsaUqkmuFMJcz3806JQ2so/wVvvZ9cl/1g8/d7XOCFmNpJob/iyMz sccM7SAW4lKOAbIrdYqNE//GEA== X-Google-Smtp-Source: AOwi7QD9M7iVauOtH6fyOpbI3co09As+BtTDEO3h1Oa/eEex2BZri19eRWAotyaMZnaVArzs8CvRsQ== X-Received: by 10.84.198.67 with SMTP id o61mr13871415pld.388.1507152086251; Wed, 04 Oct 2017 14:21:26 -0700 (PDT) Received: from skynet.sea.corp.google.com ([172.31.92.33]) by smtp.gmail.com with ESMTPSA id s68sm30204019pfd.72.2017.10.04.14.21.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 04 Oct 2017 14:21:25 -0700 (PDT) From: Thomas Garnier To: Herbert Xu , "David S . Miller" , Thomas Gleixner , Ingo Molnar , "H . Peter Anvin" , Peter Zijlstra , Josh Poimboeuf , Thomas Garnier , Arnd Bergmann , Kees Cook , Matthias Kaehlcke , Tom Lendacky , Andy Lutomirski , "Kirill A . Shutemov" , Borislav Petkov , "Rafael J . Wysocki" , Len Brown , Pavel Machek , Juergen Gross , Chris Wright , Alok Kataria , Rusty Russell , Tejun Heo , Christoph Lameter , Boris Ostrovsky , Alexey Dobriyan , Andrew Morton , Paul Gortmaker , Chris Metcalf , "Paul E . McKenney" , Nicolas Pitre , Borislav Petkov , "Luis R . Rodriguez" , Greg Kroah-Hartman , Christopher Li , Steven Rostedt , Jason Baron , Dou Liyang , "Rafael J . Wysocki" , Mika Westerberg , Lukas Wunner , Masahiro Yamada , Alexei Starovoitov , Daniel Borkmann , Markus Trippelsdorf , Paolo Bonzini , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Joerg Roedel , Rik van Riel , David Howells , Ard Biesheuvel , Waiman Long , Kyle Huey , Andrey Ryabinin , Jonathan Corbet , Matthew Wilcox , Michal Hocko , Peter Foley , Paul Bolle , Jiri Kosina , Rob Landley , "H . J . Lu" , Baoquan He , =?UTF-8?q?Jan=20H=20=2E=20Sch=C3=B6nherr?= , Daniel Micay Date: Wed, 4 Oct 2017 14:19:58 -0700 Message-Id: <20171004212003.28296-23-thgarnie@google.com> X-Mailer: git-send-email 2.14.2.920.gcf0c67979c-goog In-Reply-To: <20171004212003.28296-1-thgarnie@google.com> References: <20171004212003.28296-1-thgarnie@google.com> Cc: linux-arch@vger.kernel.org, kvm@vger.kernel.org, linux-pm@vger.kernel.org, x86@kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-sparse@vger.kernel.org, linux-crypto@vger.kernel.org, kernel-hardening@lists.openwall.com, xen-devel@lists.xenproject.org Subject: [Xen-devel] [RFC v3 22/27] x86/modules: Add option to start module section after kernel X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP Add an option so the module section is just after the mapped kernel. It will ensure position independent modules are always at the right distance from the kernel and do not require mcmodule=large. It also optimize the available size for modules by getting rid of the empty space on kernel randomization range. Signed-off-by: Thomas Garnier --- Documentation/x86/x86_64/mm.txt | 3 +++ arch/x86/Kconfig | 4 ++++ arch/x86/include/asm/pgtable_64_types.h | 6 +++++- arch/x86/kernel/head64.c | 5 ++++- arch/x86/mm/dump_pagetables.c | 4 ++-- 5 files changed, 18 insertions(+), 4 deletions(-) diff --git a/Documentation/x86/x86_64/mm.txt b/Documentation/x86/x86_64/mm.txt index b0798e281aa6..b51d66386e32 100644 --- a/Documentation/x86/x86_64/mm.txt +++ b/Documentation/x86/x86_64/mm.txt @@ -73,4 +73,7 @@ Note that if CONFIG_RANDOMIZE_MEMORY is enabled, the direct mapping of all physical memory, vmalloc/ioremap space and virtual memory map are randomized. Their order is preserved but their base will be offset early at boot time. +If CONFIG_DYNAMIC_MODULE_BASE is enabled, the module section follows the end of +the mapped kernel. + -Andi Kleen, Jul 2004 diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 777197fab6dd..1e4b399c64e5 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -2133,6 +2133,10 @@ config RANDOMIZE_MEMORY_PHYSICAL_PADDING If unsure, leave at the default value. +# Module section starts just after the end of the kernel module +config DYNAMIC_MODULE_BASE + bool + config X86_GLOBAL_STACKPROTECTOR bool depends on CC_STACKPROTECTOR diff --git a/arch/x86/include/asm/pgtable_64_types.h b/arch/x86/include/asm/pgtable_64_types.h index 06470da156ba..e00fc429b898 100644 --- a/arch/x86/include/asm/pgtable_64_types.h +++ b/arch/x86/include/asm/pgtable_64_types.h @@ -6,6 +6,7 @@ #ifndef __ASSEMBLY__ #include #include +#include /* * These are used to make use of C type-checking.. @@ -18,7 +19,6 @@ typedef unsigned long pgdval_t; typedef unsigned long pgprotval_t; typedef struct { pteval_t pte; } pte_t; - #endif /* !__ASSEMBLY__ */ #define SHARED_KERNEL_PMD 0 @@ -93,7 +93,11 @@ typedef struct { pteval_t pte; } pte_t; #define VMEMMAP_START __VMEMMAP_BASE #endif /* CONFIG_RANDOMIZE_MEMORY */ #define VMALLOC_END (VMALLOC_START + _AC((VMALLOC_SIZE_TB << 40) - 1, UL)) +#ifdef CONFIG_DYNAMIC_MODULE_BASE +#define MODULES_VADDR ALIGN(((unsigned long)_end + PAGE_SIZE), PMD_SIZE) +#else #define MODULES_VADDR (__START_KERNEL_map + KERNEL_IMAGE_SIZE) +#endif /* The module sections ends with the start of the fixmap */ #define MODULES_END __fix_to_virt(__end_of_fixed_addresses + 1) #define MODULES_LEN (MODULES_END - MODULES_VADDR) diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c index 675f1dba3b21..b6363f0d11a7 100644 --- a/arch/x86/kernel/head64.c +++ b/arch/x86/kernel/head64.c @@ -321,12 +321,15 @@ asmlinkage __visible void __init x86_64_start_kernel(char * real_mode_data) * Build-time sanity checks on the kernel image and module * area mappings. (these are purely build-time and produce no code) */ +#ifndef CONFIG_DYNAMIC_MODULE_BASE BUILD_BUG_ON(MODULES_VADDR < __START_KERNEL_map); BUILD_BUG_ON(MODULES_VADDR - __START_KERNEL_map < KERNEL_IMAGE_SIZE); - BUILD_BUG_ON(MODULES_LEN + KERNEL_IMAGE_SIZE > 2*PUD_SIZE); + BUILD_BUG_ON(!IS_ENABLED(CONFIG_RANDOMIZE_BASE_LARGE) && + MODULES_LEN + KERNEL_IMAGE_SIZE > 2*PUD_SIZE); BUILD_BUG_ON((__START_KERNEL_map & ~PMD_MASK) != 0); BUILD_BUG_ON((MODULES_VADDR & ~PMD_MASK) != 0); BUILD_BUG_ON(!(MODULES_VADDR > __START_KERNEL)); +#endif BUILD_BUG_ON(!(((MODULES_END - 1) & PGDIR_MASK) == (__START_KERNEL & PGDIR_MASK))); BUILD_BUG_ON(__fix_to_virt(__end_of_fixed_addresses) <= MODULES_END); diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c index 8691a57da63e..8565b2b45848 100644 --- a/arch/x86/mm/dump_pagetables.c +++ b/arch/x86/mm/dump_pagetables.c @@ -95,7 +95,7 @@ static struct addr_marker address_markers[] = { { EFI_VA_END, "EFI Runtime Services" }, # endif { __START_KERNEL_map, "High Kernel Mapping" }, - { MODULES_VADDR, "Modules" }, + { 0/* MODULES_VADDR */, "Modules" }, { MODULES_END, "End Modules" }, #else { PAGE_OFFSET, "Kernel Mapping" }, @@ -529,7 +529,7 @@ static int __init pt_dump_init(void) # endif address_markers[FIXADDR_START_NR].start_address = FIXADDR_START; #endif - + address_markers[MODULES_VADDR_NR].start_address = MODULES_VADDR; return 0; } __initcall(pt_dump_init);