kcore passes correct phys_start for direct mapped region and an invalid value (-1) for all other regions after the kernel commit 464920104bf7(/proc/kcore: update physical address for kcore ram and text). arch specific function is_phys_addr() accepts only virt_start. Therefore, check for valid phys_start in get_kcore_dump_loads(). Signed-off-by: Pratyush Anand <panand at redhat.com> --- elf_info.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/elf_info.c b/elf_info.c index 65ff333cf33a..c5743b3cab28 100644 --- a/elf_info.c +++ b/elf_info.c @@ -881,7 +881,8 @@ int get_kcore_dump_loads(void) for (i = 0; i < num_pt_loads; ++i) { struct pt_load_segment *p = &pt_loads[i]; - if (!is_phys_addr(p->virt_start)) + if (p->phys_start == NOT_PADDR + || !is_phys_addr(p->virt_start)) continue; loads++; } @@ -901,7 +902,8 @@ int get_kcore_dump_loads(void) for (i = 0, j = 0; i < num_pt_loads; ++i) { struct pt_load_segment *p = &pt_loads[i]; - if (!is_phys_addr(p->virt_start)) + if (p->phys_start == NOT_PADDR + || !is_phys_addr(p->virt_start)) continue; if (j >= loads) return FALSE; -- 2.9.3