Re: [MAKEDUMPFILE PATCH] makedumpfile: elf_info: check for invalid physical address when finding max_paddr

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jun 17, 2021 at 03:28:10AM +0000, HAGIO KAZUHITO(萩尾 一仁) wrote:
-----Original Message-----

Kernel commit 464920104bf7adac12722035bfefb3d772eb04d8
"/proc/kcore: update physical address for kcore ram and text" sets an
invalid paddr (-1=0xffffffffffffffff) for PT_LOAD segments of not direct
mapped regions,
    $ readelf -l /proc/kcore

    Elf file type is CORE (Core file)
    Entry point 0x0
    There are 4 program headers, starting at offset 64

    Program Headers:
      Type           Offset             VirtAddr           PhysAddr
                     FileSiz            MemSiz              Flags  Align
      NOTE           0x0000000000000120 0x0000000000000000 0x0000000000000000
                     0x0000000000002320 0x0000000000000000         0x0
      LOAD           0x1000000000010000 0xd000000000000000 0xffffffffffffffff
                                                           ^^^^^^^^^^^^^^^^^^
                     0x0001f80000000000 0x0001f80000000000  RWE    0x10000
      LOAD           0x0000000000010000 0xc000000000000000 0x0000000000000000
                     0x00000003f0000000 0x00000003f0000000  RWE    0x10000
      LOAD           0x3000000000010000 0xf000000000000000 0xffffffffffffffff
                                                           ^^^^^^^^^^^^^^^^^^
                     0x0000000000fc0000 0x0000000000fc0000  RWE    0x10000

makedumple uses max_paddr to calculate the number of sections for sparse
memory model thus wrong number is obtained based on max_paddr=-1. This
error could lead to the failure of copying /proc/kcore for RHEL-8.5 on
ppc64le machine [1],
    $ uname -r
    4.18.0-312.el8.ppc64le
    $ makedumpfile /proc/kcore vmcore1
    get_mem_section: Could not validate mem_section.
    get_mm_sparsemem: Can't get the address of mem_section.

    makedumpfile Failed.

IIUC, makedumpfile has NOT been developed to filter /proc/kcore so far,
except for the --mem-usage option, and this is the first patch for it.

It might be more handy than crash's snap.so extension, so I applied this:
https://github.com/makedumpfile/makedumpfile/commit/38d921a2ef50ebd36258097553626443ffe27496

Thanks for applying the patch!


But please note that maybe filtering /proc/kcore with makedumpfile (and
also analyzing the dumpfile with crash) is still not mature enough for
field or production use.

Thanks for the note!


Thanks,
Kazu


Let's check if the phys_start of the segment is a valid physical address
to fix this problem.

[1] https://bugzilla.redhat.com/show_bug.cgi?id=1965267

Reported-by: Xiaoying Yan <yiyan@xxxxxxxxxx>
Signed-off-by: Coiby Xu <coxu@xxxxxxxxxx>
---
 elf_info.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/elf_info.c b/elf_info.c
index e8affb7..9444847 100644
--- a/elf_info.c
+++ b/elf_info.c
@@ -628,7 +628,7 @@ get_max_paddr(void)

 	for (i = 0; i < num_pt_loads; i++) {
 		pls = &pt_loads[i];
-		if (max_paddr < pls->phys_end)
+		if (pls->phys_start != NOT_PADDR  && max_paddr < pls->phys_end)
 			max_paddr = pls->phys_end;
 	}
 	return max_paddr;
--
2.31.1


_______________________________________________
kexec mailing list
kexec@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/kexec


--
Best regards,
Coiby


_______________________________________________
kexec mailing list
kexec@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/kexec




[Index of Archives]     [LM Sensors]     [Linux Sound]     [ALSA Users]     [ALSA Devel]     [Linux Audio Users]     [Linux Media]     [Kernel]     [Gimp]     [Yosemite News]     [Linux Media]

  Powered by Linux