From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752639AbcEYXFy (ORCPT ); Wed, 25 May 2016 19:05:54 -0400 Received: from mail-pa0-f51.google.com ([209.85.220.51]:33571 "EHLO mail-pa0-f51.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752386AbcEYXFx (ORCPT ); Wed, 25 May 2016 19:05:53 -0400 From: Kees Cook To: Ingo Molnar Cc: Kees Cook , Thomas Garnier , Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , x86@kernel.org, Borislav Petkov , Juergen Gross , Matt Fleming , Toshi Kani , Baoquan He , Andrew Morton , Dan Williams , Dave Hansen , "Aneesh Kumar K.V" , "Kirill A. Shutemov" , Martin Schwidefsky , Andy Lutomirski , Alexander Kuleshov , Alexander Popov , Joerg Roedel , Dave Young , Lv Zheng , Mark Salter , Stephen Smalley , Dmitry Vyukov , Boris Ostrovsky , David Rientjes , Christian Borntraeger , Jan Beulich , Kefeng Wang , Seth Jennings , Yinghai Lu , linux-kernel@vger.kernel.org Subject: [PATCH v6 3/3] x86/mm: Memory hotplug support for KASLR memory randomization Date: Wed, 25 May 2016 15:57:35 -0700 Message-Id: <1464217055-17654-4-git-send-email-keescook@chromium.org> X-Mailer: git-send-email 2.6.3 In-Reply-To: <1464217055-17654-1-git-send-email-keescook@chromium.org> References: <1464217055-17654-1-git-send-email-keescook@chromium.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Thomas Garnier Add a new option (CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING) to define the padding used for the physical memory mapping section when KASLR memory is enabled. It ensures there is enough virtual address space when CONFIG_MEMORY_HOTPLUG is used. The default value is 10 terabytes. If CONFIG_MEMORY_HOTPLUG is not used, no space is reserved increasing the entropy available. Signed-off-by: Thomas Garnier Signed-off-by: Kees Cook --- arch/x86/Kconfig | 15 +++++++++++++++ arch/x86/mm/kaslr.c | 7 ++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index adab3fef3bb4..214b3fadbc11 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -2010,6 +2010,21 @@ config RANDOMIZE_MEMORY If unsure, say N. +config RANDOMIZE_MEMORY_PHYSICAL_PADDING + hex "Physical memory mapping padding" if EXPERT + depends on RANDOMIZE_MEMORY + default "0xa" if MEMORY_HOTPLUG + default "0x0" + range 0x1 0x40 if MEMORY_HOTPLUG + range 0x0 0x40 + ---help--- + Define the padding in terabytes added to the existing physical + memory size during kernel memory randomization. It is useful + for memory hotplug support but reduces the entropy available for + address randomization. + + If unsure, leave at the default value. + config HOTPLUG_CPU bool "Support for hot-pluggable CPUs" depends on SMP diff --git a/arch/x86/mm/kaslr.c b/arch/x86/mm/kaslr.c index 7a1aa44cff1b..0c9264ed9357 100644 --- a/arch/x86/mm/kaslr.c +++ b/arch/x86/mm/kaslr.c @@ -109,8 +109,13 @@ void __init kernel_randomize_memory(void) if (!kaslr_enabled()) return; + /* + * Update Physical memory mapping to available and + * add padding if needed (especially for memory hotplug support). + */ BUG_ON(kaslr_regions[0].base != &page_offset_base); - mem_tb = ((max_pfn << PAGE_SHIFT) >> TB_SHIFT); + mem_tb = ((max_pfn << PAGE_SHIFT) >> TB_SHIFT) + + CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING; if (mem_tb < kaslr_regions[0].size_tb) kaslr_regions[0].size_tb = mem_tb; -- 2.6.3