]> 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>
Fri, 22 Nov 2024 13:34:04 +0000 (13:34 +0000)
committerDavid Woodhouse <dwmw@amazon.co.uk>
Thu, 5 Dec 2024 15:05:07 +0000 (15:05 +0000)
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>
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);
 }