diff options
author | Dave Young <dyoung@redhat.com> | 2016-12-08 10:52:22 +0800 |
---|---|---|
committer | Simon Horman <horms@verge.net.au> | 2016-12-08 11:03:19 +0100 |
commit | dbb99d938810b60035122a1bcc68c4d585a0e57f (patch) | |
tree | 5c472874e9798c7526e92b4b874fa3c192e6282b | |
parent | 0a7fba8b145306af4909950f64f2797a08db68d4 (diff) |
kexec-tools/x86: get_kernel_vaddr_and_size off-by-one fix
I got below error while tesing kexec -p:
"Can't find kernel text map area from kcore"
The case is the pt_load start addr was same as stext_sym. The checking
code should really be saddr <= stext_sym so that the right pt_load area
includes stext_sym can be matched.
This was not reported by people previously because it will fail over to
use hardcode X86_64__START_KERNEL_map to match the pt_load areas again
in later code and it sometimes succeeds because of kernel address
randomization.
With this change according to my test stext_sym checking can garantee
falling into right pt_load area if we get correct stext_sym.
Signed-off-by: Dave Young <dyoung@redhat.com>
Signed-off-by: Simon Horman <horms@verge.net.au>
-rw-r--r-- | kexec/arch/i386/crashdump-x86.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/kexec/arch/i386/crashdump-x86.c b/kexec/arch/i386/crashdump-x86.c index ab833d4..88aeee3 100644 --- a/kexec/arch/i386/crashdump-x86.c +++ b/kexec/arch/i386/crashdump-x86.c @@ -205,7 +205,7 @@ static int get_kernel_vaddr_and_size(struct kexec_info *UNUSED(info), unsigned long long size; /* Look for kernel text mapping header. */ - if (saddr < stext_sym && eaddr > stext_sym) { + if (saddr <= stext_sym && eaddr > stext_sym) { saddr = _ALIGN_DOWN(saddr, X86_64_KERN_VADDR_ALIGN); elf_info->kern_vaddr_start = saddr; size = eaddr - saddr; |