diff options
| author | Magnus Damm <damm@igel.co.jp> | 2009-03-19 06:04:29 -0400 |
|---|---|---|
| committer | Paul Mundt <lethal@linux-sh.org> | 2009-03-20 05:56:04 -0400 |
| commit | 615e73b3cd8876262f61ea28b4147c8de38a043a (patch) | |
| tree | a846b18db9a718538d7093751e2cbe2d8ca5cc0b | |
| parent | 7e6b6f2b949a52382f59a93ecbe86e32e4fcec7c (diff) | |
sh: disallow kexec virtual entry
Older versions of kexec-tools has a zImage loader that
passes a virtual address as entry point. The elf loader
otoh it passes a physical address as entry point, and
pages are always passed as physical addresses as well.
Only allow physical addresses from now on.
Signed-off-by: Magnus Damm <damm@igel.co.jp>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
| -rw-r--r-- | arch/sh/kernel/machine_kexec.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/arch/sh/kernel/machine_kexec.c b/arch/sh/kernel/machine_kexec.c index cc7c29b0dc8d..7ea2704ea033 100644 --- a/arch/sh/kernel/machine_kexec.c +++ b/arch/sh/kernel/machine_kexec.c | |||
| @@ -46,6 +46,12 @@ void machine_crash_shutdown(struct pt_regs *regs) | |||
| 46 | */ | 46 | */ |
| 47 | int machine_kexec_prepare(struct kimage *image) | 47 | int machine_kexec_prepare(struct kimage *image) |
| 48 | { | 48 | { |
| 49 | /* older versions of kexec-tools are passing | ||
| 50 | * the zImage entry point as a virtual address. | ||
| 51 | */ | ||
| 52 | if (image->start != PHYSADDR(image->start)) | ||
| 53 | return -EINVAL; /* upgrade your kexec-tools */ | ||
| 54 | |||
| 49 | return 0; | 55 | return 0; |
| 50 | } | 56 | } |
| 51 | 57 | ||
| @@ -125,7 +131,8 @@ void machine_kexec(struct kimage *image) | |||
| 125 | 131 | ||
| 126 | /* now call it */ | 132 | /* now call it */ |
| 127 | rnk = (relocate_new_kernel_t) reboot_code_buffer; | 133 | rnk = (relocate_new_kernel_t) reboot_code_buffer; |
| 128 | (*rnk)(page_list, reboot_code_buffer, image->start); | 134 | (*rnk)(page_list, reboot_code_buffer, |
| 135 | (unsigned long)phys_to_virt(image->start)); | ||
| 129 | 136 | ||
| 130 | #ifdef CONFIG_KEXEC_JUMP | 137 | #ifdef CONFIG_KEXEC_JUMP |
| 131 | asm volatile("ldc %0, vbr" : : "r" (&vbr_base) : "memory"); | 138 | asm volatile("ldc %0, vbr" : : "r" (&vbr_base) : "memory"); |
