From: David Woodhouse Date: Thu, 5 Dec 2024 15:05:19 +0000 (+0000) Subject: x86/kexec: Mark relocate_kernel page as ROX instead of RWX X-Git-Tag: v6.14-rc1~119^2~14 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5a82223e0743fb36bcb99657772513739d1a9936;p=thirdparty%2Flinux.git x86/kexec: Mark relocate_kernel page as ROX instead of RWX All writes to the page now happen before it gets marked as executable (or after it's already switched to the identmap page tables where it's OK to be RWX). Signed-off-by: David Woodhouse Signed-off-by: Ingo Molnar Cc: Baoquan He Cc: Vivek Goyal Cc: Dave Young Cc: Eric Biederman Cc: Ard Biesheuvel Cc: "H. Peter Anvin" Cc: Linus Torvalds Link: https://lore.kernel.org/r/20241205153343.3275139-14-dwmw2@infradead.org --- diff --git a/arch/x86/kernel/machine_kexec_64.c b/arch/x86/kernel/machine_kexec_64.c index c9fd60f8f8065..9232ad1562c88 100644 --- a/arch/x86/kernel/machine_kexec_64.c +++ b/arch/x86/kernel/machine_kexec_64.c @@ -323,7 +323,7 @@ int machine_kexec_prepare(struct kimage *image) __memcpy(control_page, __relocate_kernel_start, reloc_end - reloc_start); - set_memory_x((unsigned long)control_page, 1); + set_memory_rox((unsigned long)control_page, 1); return 0; } @@ -333,6 +333,7 @@ void machine_kexec_cleanup(struct kimage *image) void *control_page = page_address(image->control_code_page); set_memory_nx((unsigned long)control_page, 1); + set_memory_rw((unsigned long)control_page, 1); free_transition_pgtable(image); }