From patchwork Wed Oct 11 20:30:22 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Garnier X-Patchwork-Id: 10000551 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 9B13D6037F for ; Wed, 11 Oct 2017 20:33:24 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8F9E028B37 for ; Wed, 11 Oct 2017 20:33:24 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8342228B6A; Wed, 11 Oct 2017 20:33:24 +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=-3.6 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, RCVD_IN_DNSWL_MED, RCVD_IN_SORBS_SPAM, 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 D60D328B37 for ; Wed, 11 Oct 2017 20:33:23 +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 1e2NfO-00011F-MT; Wed, 11 Oct 2017 20:31:46 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1e2NfN-0000ye-Kf for xen-devel@lists.xenproject.org; Wed, 11 Oct 2017 20:31:45 +0000 Received: from [85.158.139.211] by server-1.bemta-5.messagelabs.com id AE/60-15990-0BF7ED95; Wed, 11 Oct 2017 20:31:44 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrFIsWRWlGSWpSXmKPExsVyMfTASt319fc iDdoO6lp83zKZyYHR4/CHKywBjFGsmXlJ+RUJrBmnbu1kLZiqWrFz6jvGBsZL8l2MXBxCAjMY JT6tXMHYxcjJwSLwikXi6QcZkISEQD+rxNLfi8ESEgJZEl9/T2GHsNMk7j2+xwphV0k0vDsMF hcSUJLYumEpM8TUf4wS0xd/BWtmE9CS2NMwnwkkISJwQlhi04ffjCAOs8AZJonjfSfBRgkLhE l8nr+QFeIOVYkdaxvAxvIKWEq0d81mg1hnIXHs2GEWEJsTKP594yFmiNUWEitnnWedwCi4gJF hFaNGcWpRWWqRrqGFXlJRZnpGSW5iZo6uoYGpXm5qcXFiempOYlKxXnJ+7iZGYNgxAMEOxqbt nocYJTmYlER5H8bcixTiS8pPqcxILM6ILyrNSS0+xCjDwaEkwXu3DignWJSanlqRlpkDjACYt AQHj5IIrxdImre4IDG3ODMdInWK0ZLjwp1Lf5g4Duy5BSQ7bt79wyTEkpeflyolzvsQpEEApC GjNA9uHCxKLzHKSgnzMgIdKMRTkFqUm1mCKv+KUZyDUUmY9zDIFJ7MvBK4ra+ADmICOkg07Q7 IQSWJCCmpBsbN9/9c85+58sv6H2d2aR21FhbflNq6ZUK8lnzXhItGm/rbbvrcUPpr/YrhapjI KX9ZFQ3j4Nh7S36s73fQF1jLdXvmXIUHYXOf90UuOflHliH6akDL30C/fWuYXZJmneh1mJYT/ iHvRJh5e0Br3ddHk1jeyXdZ/47NsXwvtZgheYlkYvzjU2FKLMUZiYZazEXFiQCVlWlMzQIAAA == X-Env-Sender: thgarnie@google.com X-Msg-Ref: server-9.tower-206.messagelabs.com!1507753902!106668021!1 X-Originating-IP: [209.85.192.169] X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50 X-StarScan-Received: X-StarScan-Version: 9.4.45; banners=-,-,- X-VirusChecked: Checked Received: (qmail 42783 invoked from network); 11 Oct 2017 20:31:43 -0000 Received: from mail-pf0-f169.google.com (HELO mail-pf0-f169.google.com) (209.85.192.169) by server-9.tower-206.messagelabs.com with AES128-GCM-SHA256 encrypted SMTP; 11 Oct 2017 20:31:43 -0000 Received: by mail-pf0-f169.google.com with SMTP id b79so1952505pfk.5 for ; Wed, 11 Oct 2017 13:31:43 -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=kWgWxdSDmWJDgDj/I1Haet9s69gfCoEjaXWM1BK2g5s=; b=XYYkko1zmKHk7y1LTrwDLY6Op9B/rwZ+Wyrcp9Lsv2u+3zQXlNmfrzhX5LJGtvdD0O s68EpaDeYFfkm8Z1RNAnjUWbCQHMa523BVX4MDG13j9T5o772T4+J7KHcvMviQLoDi+7 x9rYGaXAqlBVDKWmCD6C37at0DoLqSoUYyYKUo0QZxOoxjIUgT+wvrqSvqIlDD0OOvxC blOZkC5QEnvk55YCMTkhiHoX0hLmqFfDR/mRnO68o+OUDF2AjHNTi5NsGJAPtWjqTh3r uEfolrDL6Do81S2drjpV33XSK+L4pZ05zT02Lm+O6E3oKyh7RpfXfZ5GoxY3aIIKgQX6 0AEQ== 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=kWgWxdSDmWJDgDj/I1Haet9s69gfCoEjaXWM1BK2g5s=; b=hIYcfJJFLvtEx7lhKvCRyLIofaNVAWtVknGrdiY6f4MiUD/mHSQkqDuCXU80iTOESn f6jAuPOMfRHqTAwTHu+EdrVTIHUaexxGU8H/gcn8VdjggFLWYl3EO2YVVHhtHznd3NSA Z/qv+UmSgChsN2vvpMn1AKyDwGJHCqHzE6YuH9/fGI+waawW8GuSbGx848lPh3z/+TSz iqc4g8RFj5mIjRw2oz2u8ibu1kw+KuCd4dXfFDKlWG81eJzbfeS49h96sW/1nj7v/oSH YtK2BolwjCG9x3NKdS94c6Mn4gOtcCrbGhvKNNW5JiEsDAAFfAzsc0Id1NObTlnwpVjr AhaQ== X-Gm-Message-State: AMCzsaWf8wHA7P/fsPoki9TEbX/3lNmuFKb8qqMpSkvucEikZb73KdQ/ iVPp5wmkhwtZ5cYBa6rL+gqOjA== X-Google-Smtp-Source: AOwi7QBOWaAJo7GUWrH3GFaB/GNXioWLpvUbmTOr+D9C3EEV1H11+GizRSmB697xl5wqPaQXMPCrCg== X-Received: by 10.159.204.139 with SMTP id t11mr174963plo.121.1507753900219; Wed, 11 Oct 2017 13:31:40 -0700 (PDT) Received: from skynet.sea.corp.google.com ([172.31.92.33]) by smtp.gmail.com with ESMTPSA id n12sm20691913pfb.149.2017.10.11.13.31.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 11 Oct 2017 13:31:38 -0700 (PDT) From: Thomas Garnier To: Herbert Xu , "David S . Miller" , Thomas Gleixner , Ingo Molnar , "H . Peter Anvin" , Peter Zijlstra , Josh Poimboeuf , Arnd Bergmann , Thomas Garnier , Kees Cook , Andrey Ryabinin , 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 , Paul Gortmaker , Andrew Morton , Alexey Dobriyan , "Paul E . McKenney" , Nicolas Pitre , Borislav Petkov , "Luis R . Rodriguez" , Greg Kroah-Hartman , Christopher Li , Steven Rostedt , Jason Baron , Mika Westerberg , Dou Liyang , "Rafael J . Wysocki" , 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 , Jonathan Corbet , Michal Hocko , Peter Foley , Paul Bolle , Jiri Kosina , "H . J . Lu" , Rob Landley , Baoquan He , =?UTF-8?q?Jan=20H=20=2E=20Sch=C3=B6nherr?= , Daniel Micay Date: Wed, 11 Oct 2017 13:30:22 -0700 Message-Id: <20171011203027.11248-23-thgarnie@google.com> X-Mailer: git-send-email 2.15.0.rc0.271.g36b669edcc-goog In-Reply-To: <20171011203027.11248-1-thgarnie@google.com> References: <20171011203027.11248-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] [PATCH v1 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 772ff3e0f623..1f2b731c9ec3 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 "Stack cookie using a global variable" select 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);