[BUGFIX] kexec, x86, Fix incorrect jump back address if not preserve context

From: Huang Ying
Date: Wed Jul 13 2011 - 21:34:54 EST


In kexec jump support, jump back address passed to the kexeced kernel
via function calling ABI, that is, the function call return address is
the jump back entry. And jump back entry == 0 should be used to
signal that jump back or preserve context is not enabled in original
kernel. But in original implementation, the stack position used for
function call return address is not cleared if preserve context is
disabled. The patch fixes this issue.

Signed-off-by: Huang Ying <ying.huang@xxxxxxxxx>
Reported-and-tested-by: Yin Kangkai <kangkai.yin@xxxxxxxxx>
---
arch/x86/kernel/relocate_kernel_32.S | 2 ++
arch/x86/kernel/relocate_kernel_64.S | 2 ++
2 files changed, 4 insertions(+)

--- a/arch/x86/kernel/relocate_kernel_32.S
+++ b/arch/x86/kernel/relocate_kernel_32.S
@@ -97,6 +97,8 @@ relocate_kernel:
ret

identity_mapped:
+ /* set return address as 0 if not preserve context */
+ pushl $0
/* store the start address on the stack */
pushl %edx

--- a/arch/x86/kernel/relocate_kernel_64.S
+++ b/arch/x86/kernel/relocate_kernel_64.S
@@ -100,6 +100,8 @@ relocate_kernel:
ret

identity_mapped:
+ /* set return address as 0 if not preserve context */
+ pushq $0
/* store the start address on the stack */
pushq %rdx

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/