Kexec/Kexec-jump requires code size in control page is less than
PAGE_SIZE/2. This patch adds runtime checking for this.

Signed-off-by: Huang Ying <[EMAIL PROTECTED]>

---
 arch/x86/kernel/machine_kexec_32.c   |    4 ++++
 arch/x86/kernel/relocate_kernel_32.S |    3 +++
 include/asm-x86/kexec.h              |    1 +
 3 files changed, 8 insertions(+)

--- a/arch/x86/kernel/machine_kexec_32.c
+++ b/arch/x86/kernel/machine_kexec_32.c
@@ -92,6 +92,10 @@ int machine_kexec_prepare(struct kimage 
 {
        if (nx_enabled)
                set_pages_x(image->control_code_page, 1);
+
+       BUG_ON((unsigned long)kexec_control_page_code_end - \
+              (unsigned long)relocate_kernel >= PAGE_SIZE/2);
+
        return 0;
 }
 
--- a/arch/x86/kernel/relocate_kernel_32.S
+++ b/arch/x86/kernel/relocate_kernel_32.S
@@ -376,3 +376,6 @@ swap_pages:
        popl    %ebx
        popl    %ebp
        ret
+
+       .globl kexec_control_page_code_end
+kexec_control_page_code_end:
--- a/include/asm-x86/kexec.h
+++ b/include/asm-x86/kexec.h
@@ -159,6 +159,7 @@ relocate_kernel(unsigned long indirectio
                unsigned long start_address,
                unsigned int has_pae,
                unsigned int preserve_context);
+void kexec_control_page_code_end(void);
 #else
 NORET_TYPE void
 relocate_kernel(unsigned long indirection_page,



_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to