On Thu, 15 Dec 2022 at 13:38, Evgeniy Baskov <baskov@xxxxxxxxx> wrote: > > Use previously added code to use 4KB pages for mapping. Map compressed > and uncompressed kernel with appropriate memory protection attributes. > For compressed kernel set them up manually. For uncompressed kernel > used flags specified in ELF header. > > Tested-by: Mario Limonciello <mario.limonciello@xxxxxxx> > Tested-by: Peter Jones <pjones@xxxxxxxxxx> > Signed-off-by: Evgeniy Baskov <baskov@xxxxxxxxx> > This patch breaks the 'nokaslr' command line option (at least with SeaBIOS) unless I apply the hunk below: --- a/arch/x86/boot/compressed/misc.c +++ b/arch/x86/boot/compressed/misc.c @@ -329,7 +329,8 @@ static size_t parse_elf(void *output, unsigned long output_len, handle_relocations(output, output_len, virt_addr); - if (!IS_ENABLED(CONFIG_RANDOMIZE_BASE)) + if (!IS_ENABLED(CONFIG_RANDOMIZE_BASE) || + cmdline_find_option_bool("nokaslr")) goto skip_protect; for (i = 0; i < ehdr.e_phnum; i++) { @@ -481,8 +482,10 @@ asmlinkage __visible void *extract_kernel(void *rmode, memptr heap, * If KASLR is disabled input and output regions may overlap. * In this case we need to map region excutable as well. */ - unsigned long map_flags = MAP_ALLOC | MAP_WRITE | - (IS_ENABLED(CONFIG_RANDOMIZE_BASE) ? 0 : MAP_EXEC); + unsigned long map_flags = MAP_ALLOC | MAP_WRITE; + if (!IS_ENABLED(CONFIG_RANDOMIZE_BASE) || + cmdline_find_option_bool("nokaslr")) + map_flags |= MAP_EXEC; phys_addr = kernel_add_identity_map(phys_addr, phys_addr + needed_size, map_flags);