[PATCH] Do not create arch-specific p2m mapping for ELF xen dumps

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

 



Hello Dave,

Let me send you a cleanup/fix for Xen DomU dumps.

When opening a Xen DomU dump without auto-translated addresses (e.g.
from an x86_64 PV domain), a mapping between physical and machine
pages is needed. An xc_core dump file does not contain this mapping,
so it must be created by arch-specific code from the dumped data.

This (and only this) is the job of the machdep->xendump_p2m_create
callback, which is called if the XC_CORE_P2M_CREATE flag is set. ELF
files contain the mapping in a separate section (".xen_p2m"), so this
arch-specific code is not needed and should not be run.

On the other hand, XC_CORE_P2M_CREATE also triggers the initialization
of the elf_index_pfn array. I believe this should be in fact controlled
by XC_CORE_PFN_CREATE, because the flag is not used for anything else.

I found this issue thanks to a Xen DomU ELF dump file that contained an
invalid CR3 value, which could not be used to translate kvaddr to maddr.
Without the patch, session initialization fails with these messages:

crash: cannot find mfn 0 (0x0) in page index

crash: cannot read/find pud page

Signed-off-by: Petr Tesarik <ptesarik@xxxxxxxx>
Do not create arch-specific p2m mapping for ELF xen dumps

From: Petr Tesarik <ptesarik@xxxxxxxx>

When opening a Xen DomU dump without auto-translated addresses (e.g.
from an x86_64 PV domain), a mapping between physical and machine
pages is needed. An xc_core dump file does not contain this mapping,
so it must be created by arch-specific code from the dumped data.

This (and only this) is the job of the machdep->xendump_p2m_create
callback, which is called if the XC_CORE_P2M_CREATE flag is set. ELF
files contain the mapping in a separate section (".xen_p2m"), so this
arch-specific code is not needed and should not be run.

On the other hand, XC_CORE_P2M_CREATE also triggers the initialization
of the elf_index_pfn array. I believe this should be in fact controlled
by XC_CORE_PFN_CREATE, because the flag is not used for anything else.

I found this issue thanks to a Xen DomU ELF dump file that contained an
invalid CR3 value, which could not be used to translate kvaddr to maddr.
Without the patch, session initialization fails with these messages:

crash: cannot find mfn 0 (0x0) in page index

crash: cannot read/find pud page

Signed-off-by: Petr Tesarik <ptesarik@xxxxxxxx>
---
 xendump.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/xendump.c b/xendump.c
index 7f89874..8170b22 100644
--- a/xendump.c
+++ b/xendump.c
@@ -1260,7 +1260,7 @@ xc_core_create_pfn_tables(void)
 			    "cannot create xen pfn-to-mfn mapping\n");
 	}
 
-	if (xd->flags & XC_CORE_ELF)
+	if (xd->flags & XC_CORE_PFN_CREATE)
 		xc_core_elf_pfn_init();
 
 	xd->flags &= ~(XC_CORE_P2M_CREATE|XC_CORE_PFN_CREATE);
@@ -2557,7 +2557,7 @@ xc_core_dump_Elf32_Shdr(Elf32_Off offset, int store)
 	if (STREQ(name, ".xen_p2m")) {
 		xd->xc_core.header.xch_index_offset =
 			(off_t)shdr.sh_offset;
-		xd->flags |= XC_CORE_P2M_CREATE;
+		xd->flags |= XC_CORE_PFN_CREATE;
 	}
 
 	if (STREQ(name, ".xen_pages"))
@@ -2659,7 +2659,7 @@ xc_core_dump_Elf64_Shdr(Elf64_Off offset, int store)
 	if (STREQ(name, ".xen_p2m")) {
 		xd->xc_core.header.xch_index_offset =
 			(off_t)shdr.sh_offset;
-		xd->flags |= XC_CORE_P2M_CREATE;
+		xd->flags |= XC_CORE_PFN_CREATE;
 	}
 
 	if (STREQ(name, ".xen_pages"))
--
Crash-utility mailing list
Crash-utility@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/crash-utility

[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux