On Wed, Mar 4, 2015 at 12:00 PM, Ingo Molnar <mingo@xxxxxxxxxx> 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 <matt.fleming@xxxxxxxxx> Cc: Borislav Petkov <bp@xxxxxxx> Cc: Kees Cook <keescook@xxxxxxxxxxxx> Cc: Jiri Kosina <jkosina@xxxxxxx> Acked-by: Jiri Kosina <jkosina@xxxxxxx> Signed-off-by: Yinghai Lu <yinghai@xxxxxxxxxx> --- 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) -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html