summaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel
diff options
context:
space:
mode:
authorDavid Woodhouse <dwmw@amazon.co.uk>2024-12-05 15:05:19 +0000
committerIngo Molnar <mingo@kernel.org>2024-12-06 10:42:01 +0100
commit5a82223e0743fb36bcb99657772513739d1a9936 (patch)
tree8073647c0fef894ef7a0830bc6a69402389189ef /arch/x86/kernel
parent93e489ad7a4694bb2fe8110f5012f85bd3eee65a (diff)
downloadlinux-stable-5a82223e0743fb36bcb99657772513739d1a9936.tar.gz
linux-stable-5a82223e0743fb36bcb99657772513739d1a9936.tar.bz2
linux-stable-5a82223e0743fb36bcb99657772513739d1a9936.zip
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 <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
Diffstat (limited to 'arch/x86/kernel')
-rw-r--r--arch/x86/kernel/machine_kexec_64.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/x86/kernel/machine_kexec_64.c b/arch/x86/kernel/machine_kexec_64.c
index c9fd60f8f806..9232ad1562c8 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);
}