* [PATCH v2] Fix the false positive error message when search /proc/kallsyms for kernel symbol
@ 2017-03-02 9:39 Baoquan He
2017-03-03 1:02 ` Baoquan He
0 siblings, 1 reply; 2+ messages in thread
From: Baoquan He @ 2017-03-02 9:39 UTC (permalink / raw)
To: horms; +Cc: dyoung, kexec, Baoquan He
Function get_kernel_sym in kexec will search /proc/kallsyms for
kernel symbol and print error message anyway if expected symbol
is not found. While page_offset_base definition and exporting
codes are only available when mm KASLR code is compiled in kernel.
Otherwise search will fail and print out error message, obviously
this is false positive warning.
So in this patch take out the error message from get_kernel_sym and
put it where get_kernel_sym is called and expected symbol is not found.
Signed-off-by: Baoquan He <bhe@redhat.com>
---
kexec/arch/i386/crashdump-x86.c | 41 +++++++++++++++++++++++------------------
1 file changed, 23 insertions(+), 18 deletions(-)
diff --git a/kexec/arch/i386/crashdump-x86.c b/kexec/arch/i386/crashdump-x86.c
index 88aeee3..b9adc8c 100644
--- a/kexec/arch/i386/crashdump-x86.c
+++ b/kexec/arch/i386/crashdump-x86.c
@@ -127,7 +127,6 @@ static unsigned long long get_kernel_sym(const char *symbol)
}
}
- fprintf(stderr, "Cannot get kernel %s symbol address\n", symbol);
return 0;
}
@@ -193,30 +192,36 @@ static int get_kernel_vaddr_and_size(struct kexec_info *UNUSED(info),
}
if (lowest_vaddr != 0)
elf_info->page_offset = lowest_vaddr;
+ } else {
+ fprintf(stderr, "Cannot get kernel page_offset_base symbol address\n");
}
/* Traverse through the Elf headers and find the region where
* _stext symbol is located in. That's where kernel is mapped */
stext_sym = get_kernel_sym("_stext");
- for(phdr = ehdr.e_phdr; stext_sym && phdr != end_phdr; phdr++) {
- if (phdr->p_type == PT_LOAD) {
- unsigned long long saddr = phdr->p_vaddr;
- unsigned long long eaddr = phdr->p_vaddr + phdr->p_memsz;
- unsigned long long size;
-
- /* Look for kernel text mapping header. */
- 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;
- /* Align size to page size boundary. */
- size = _ALIGN(size, align);
- elf_info->kern_size = size;
- dbgprintf("kernel vaddr = 0x%llx size = 0x%llx\n",
- saddr, size);
- return 0;
+ if (stext_sym) {
+ for(phdr = ehdr.e_phdr; stext_sym && phdr != end_phdr; phdr++) {
+ if (phdr->p_type == PT_LOAD) {
+ unsigned long long saddr = phdr->p_vaddr;
+ unsigned long long eaddr = phdr->p_vaddr + phdr->p_memsz;
+ unsigned long long size;
+
+ /* Look for kernel text mapping header. */
+ 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;
+ /* Align size to page size boundary. */
+ size = _ALIGN(size, align);
+ elf_info->kern_size = size;
+ dbgprintf("kernel vaddr = 0x%llx size = 0x%llx\n",
+ saddr, size);
+ return 0;
+ }
}
}
+ } else {
+ fprintf(stderr, "Cannot get kernel _stext symbol address\n");
}
/* If failed to retrieve kernel text mapping through
--
2.5.5
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH v2] Fix the false positive error message when search /proc/kallsyms for kernel symbol
2017-03-02 9:39 [PATCH v2] Fix the false positive error message when search /proc/kallsyms for kernel symbol Baoquan He
@ 2017-03-03 1:02 ` Baoquan He
0 siblings, 0 replies; 2+ messages in thread
From: Baoquan He @ 2017-03-03 1:02 UTC (permalink / raw)
To: horms; +Cc: kexec, dyoung
On 03/02/17 at 05:39pm, Baoquan He wrote:
> Function get_kernel_sym in kexec will search /proc/kallsyms for
> kernel symbol and print error message anyway if expected symbol
> is not found. While page_offset_base definition and exporting
> codes are only available when mm KASLR code is compiled in kernel.
> Otherwise search will fail and print out error message, obviously
> this is false positive warning.
This doesn't work, I must have been dizzy yesterday, NACK it. Will
repost with a new one.
>
> So in this patch take out the error message from get_kernel_sym and
> put it where get_kernel_sym is called and expected symbol is not found.
>
> Signed-off-by: Baoquan He <bhe@redhat.com>
> ---
> kexec/arch/i386/crashdump-x86.c | 41 +++++++++++++++++++++++------------------
> 1 file changed, 23 insertions(+), 18 deletions(-)
>
> diff --git a/kexec/arch/i386/crashdump-x86.c b/kexec/arch/i386/crashdump-x86.c
> index 88aeee3..b9adc8c 100644
> --- a/kexec/arch/i386/crashdump-x86.c
> +++ b/kexec/arch/i386/crashdump-x86.c
> @@ -127,7 +127,6 @@ static unsigned long long get_kernel_sym(const char *symbol)
> }
> }
>
> - fprintf(stderr, "Cannot get kernel %s symbol address\n", symbol);
> return 0;
> }
>
> @@ -193,30 +192,36 @@ static int get_kernel_vaddr_and_size(struct kexec_info *UNUSED(info),
> }
> if (lowest_vaddr != 0)
> elf_info->page_offset = lowest_vaddr;
> + } else {
> + fprintf(stderr, "Cannot get kernel page_offset_base symbol address\n");
> }
>
> /* Traverse through the Elf headers and find the region where
> * _stext symbol is located in. That's where kernel is mapped */
> stext_sym = get_kernel_sym("_stext");
> - for(phdr = ehdr.e_phdr; stext_sym && phdr != end_phdr; phdr++) {
> - if (phdr->p_type == PT_LOAD) {
> - unsigned long long saddr = phdr->p_vaddr;
> - unsigned long long eaddr = phdr->p_vaddr + phdr->p_memsz;
> - unsigned long long size;
> -
> - /* Look for kernel text mapping header. */
> - 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;
> - /* Align size to page size boundary. */
> - size = _ALIGN(size, align);
> - elf_info->kern_size = size;
> - dbgprintf("kernel vaddr = 0x%llx size = 0x%llx\n",
> - saddr, size);
> - return 0;
> + if (stext_sym) {
> + for(phdr = ehdr.e_phdr; stext_sym && phdr != end_phdr; phdr++) {
> + if (phdr->p_type == PT_LOAD) {
> + unsigned long long saddr = phdr->p_vaddr;
> + unsigned long long eaddr = phdr->p_vaddr + phdr->p_memsz;
> + unsigned long long size;
> +
> + /* Look for kernel text mapping header. */
> + 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;
> + /* Align size to page size boundary. */
> + size = _ALIGN(size, align);
> + elf_info->kern_size = size;
> + dbgprintf("kernel vaddr = 0x%llx size = 0x%llx\n",
> + saddr, size);
> + return 0;
> + }
> }
> }
> + } else {
> + fprintf(stderr, "Cannot get kernel _stext symbol address\n");
> }
>
> /* If failed to retrieve kernel text mapping through
> --
> 2.5.5
>
>
> _______________________________________________
> kexec mailing list
> kexec@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/kexec
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-03-03 1:02 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-03-02 9:39 [PATCH v2] Fix the false positive error message when search /proc/kallsyms for kernel symbol Baoquan He
2017-03-03 1:02 ` Baoquan He
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox