Kernel behaviour is inconsistent between KASLR code is not compiled in with CONFIG_RANDOMIZE_BASE disabled and user specifies "nokaslr" when KASLR code compiled in with CONFIG_RANDOMIZE_BASE enabled. As long as CONFIG_RANDOMIZE_BASE is enabled, kernel mapping size will be extended up another 512M to 1G though "nokaslr" is specified explicitly. This is buggy. CONFIG_RANDOMIZE_BASE should only decide if KASLR code need be compiled in. If user specify "nokaslr", the kernel have to behave as no KASLR code compiled in at all as expected.
The root cause of the inconsistency is the size of kernel image mapping area is fixed at compiling time, and is changed from 512M to 1G as long as CONFIG_RANDOMIZE_BASE is enabled. So in this patchset, change to determine the size of kernel image mapping area at runtime. Though KASLR code compiled in, if "nokaslr" specified, still make kernel mapping size be 512M. v1->v2: Kbuild test threw build warning because of code bug. v2->v3: Boris pointed out patch log is not good for reviewing and understanding. So split the old patch 2/2 into 2 parts and rewrite the patch log, patch 2/3 is introducing the new constant KERNEL_MAPPING_SIZE which differs from the old KERNEL_IMAGE_SIZE, patch 3/3 gets the kernel mapping size at runtime. Baoquan He (3): x86/64: Make kernel text mapping always take one whole page table in early boot code x86/64: Introduce a new constant KERNEL_MAPPING_SIZE x86/64/KASLR: Determine the kernel mapping size at run time arch/x86/boot/compressed/kaslr.c | 20 +++++++++++++++----- arch/x86/include/asm/kaslr.h | 1 + arch/x86/include/asm/page_64_types.h | 20 ++++++++++++-------- arch/x86/include/asm/pgtable_64_types.h | 2 +- arch/x86/kernel/head64.c | 11 ++++++----- arch/x86/kernel/head_64.S | 16 +++++++++------- arch/x86/mm/dump_pagetables.c | 3 ++- arch/x86/mm/init_64.c | 2 +- arch/x86/mm/physaddr.c | 6 +++--- 9 files changed, 50 insertions(+), 31 deletions(-) -- 2.5.5