From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yinghai Lu Subject: Re: [PATCH v2 04/15] x86, kaslr: get kaslr_enabled back correctly Date: Wed, 4 Mar 2015 13:32:53 -0800 Message-ID: References: <1425456048-16236-1-git-send-email-yinghai@kernel.org> <1425456048-16236-5-git-send-email-yinghai@kernel.org> <20150304101649.GA3663@pd.tnic> <20150304200000.GB6276@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Return-path: In-Reply-To: <20150304200000.GB6276@gmail.com> Sender: linux-kernel-owner@vger.kernel.org To: Ingo Molnar Cc: Borislav Petkov , Matt Fleming , "H. Peter Anvin" , Bjorn Helgaas , Thomas Gleixner , Ingo Molnar , Jiri Kosina , Borislav Petkov , Baoquan He , Linux Kernel Mailing List , "linux-efi@vger.kernel.org" , "linux-pci@vger.kernel.org" , Kees Cook List-Id: linux-efi@vger.kernel.org On Wed, Mar 4, 2015 at 12:00 PM, Ingo Molnar wrote: > > It is totally unacceptable that you don't do proper analysis of the > patches you submit, and that you don't bother writing proper, readable > changelogs. Sorry, please check it again: Subject: [PATCH v4] x86, kaslr: Get kaslr_enabled back correctly commit f47233c2d34f ("x86/mm/ASLR: Propagate base load address calculation") is using address as value for kaslr_enabled. That will get wrong value back for kaslr_enabled in kernel stage. 1. When kaslr is not enabled at boot/choose_kernel_location, if kaslr_enabled get set wrongly in setup.c, late in module.c::get_module_load_offset will return not wanted random module load offset. That change behavior when HIBERNATION is defined or nokaslr is passed. 2. When kaslr is enabled at boot/choose_kernel_location, if kaslr_enabled get cleared wrongly in setup.c, late in module.c::get_module_load_offset will not return wanted random module load offset. This patch changes the code to use early_memmap and access the value, and will keep boot and kernel consistent with kaslr. -v3: add checking return from early_memmap according to bp. Fixes: f47233c2d34f ("x86/mm/ASLR: Propagate base load address calculation") Cc: Matt Fleming Cc: Borislav Petkov Cc: Kees Cook Cc: Jiri Kosina Acked-by: Jiri Kosina Signed-off-by: Yinghai Lu --- arch/x86/kernel/setup.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) Index: linux-2.6/arch/x86/kernel/setup.c =================================================================== --- linux-2.6.orig/arch/x86/kernel/setup.c +++ linux-2.6/arch/x86/kernel/setup.c @@ -429,7 +429,18 @@ static void __init reserve_initrd(void) static void __init parse_kaslr_setup(u64 pa_data, u32 data_len) { - kaslr_enabled = (bool)(pa_data + sizeof(struct setup_data)); + /* kaslr_setup_data is defined in aslr.c */ + unsigned char *data; + unsigned long offset = sizeof(struct setup_data); + + data = early_memremap(pa_data, offset + 1); + if (!data) { + kaslr_enabled = true; + return; + } + + kaslr_enabled = *(data + offset); + early_memunmap(data, offset + 1); } static void __init parse_setup_data(void)