]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
x86/kexec: Mark relocate_kernel page as ROX instead of RWX
authorDavid Woodhouse <dwmw@amazon.co.uk>
Thu, 5 Dec 2024 15:05:19 +0000 (15:05 +0000)
committerIngo Molnar <mingo@kernel.org>
Fri, 6 Dec 2024 09:42:01 +0000 (10:42 +0100)
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 <dwmw@amazon.co.uk>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Cc: Baoquan He <bhe@redhat.com>
Cc: Vivek Goyal <vgoyal@redhat.com>
Cc: Dave Young <dyoung@redhat.com>
Cc: Eric Biederman <ebiederm@xmission.com>
Cc: Ard Biesheuvel <ardb@kernel.org>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: https://lore.kernel.org/r/20241205153343.3275139-14-dwmw2@infradead.org
arch/x86/kernel/machine_kexec_64.c

index c9fd60f8f80658d522da2de3649a1c36a3534817..9232ad1562c8891af9c6ae6bdf9d4feb13217198 100644 (file)
@@ -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);
 }