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 <ying.huang at intel.com> --- 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,