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 <[email protected]>
---
 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


_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to