[Crash-utility] Unknown osrelease information in vmcore with xen

Dave Anderson anderson at redhat.com
Fri Dec 11 14:29:47 UTC 2015



----- Original Message -----
> 
> 
> ----- Original Message -----
> > Hi,
> > 
> > I have a SuSE SLES11 vmcore with xen and tried to read the osrelease from
> > the vmcore with
> > # crash --osrelease vmcore
> > unknown
> > 
> > The problem is that there are two notes in the vmcore starting with
> > "VMCOREINFO":
> > 
> > Elf64_Nhdr:
> >                n_namesz: 11 ("VMCOREINFO")
> >                n_descsz: 1384
> >                  n_type: 0 (unused)
> >                          OSRELEASE=3.0.101-63-xen
> >                ...
> > Elf64_Nhdr:
> >                n_namesz: 15 ("VMCOREINFO_XEN")
> >                n_descsz: 4068
> >                  n_type: 0 (unused)
> >                ...
> > 
> > In the function dump_Elf64_Nhdr() I found:
> >     vmcoreinfo = STRNEQ(buf, "VMCOREINFO");
> > 
> > But because the "VMCOREINFO_XEN" ist the second one in the file it wins!
> > 
> > When using
> >     vmcoreinfo = STREQ(buf, "VMCOREINFO");
> > all is fine and I get:
> > # crash --osrelease vmcore
> > 3.0.101-63-xen
> > 
> > So my question is: why is STRNEQ() used?
> > Thanks!
> 
> Hello Dietmar,
> 
> As I recall, I did all of the note name checks that way because the length
> of the name string is specified by the note->n_namesz field, and therefore
> not necessarily guaranteed to be a NULL-terminated string?  In reality,
> they're probably will be a NULL there though.
> 
> Anyway, I wasn't even familiar with the existence of a VMCOREINFO_XEN note,
> so please feel free to post a patch to address it.
> 
> Dave


This should work, right?:

--- crash-7.1.3/netdump.c.orig
+++ crash-7.1.3/netdump.c
@@ -1940,7 +1940,8 @@ dump_Elf32_Nhdr(Elf32_Off offset, int st
 #endif
 	default:
 		xen_core = STRNEQ(buf, "XEN CORE") || STRNEQ(buf, "Xen");
-		vmcoreinfo = STRNEQ(buf, "VMCOREINFO");
+		if (!STRNEQ(buf, "VMCOREINFO_XEN"))
+			vmcoreinfo = STRNEQ(buf, "VMCOREINFO");
 		eraseinfo = STRNEQ(buf, "ERASEINFO");
 		qemuinfo = STRNEQ(buf, "QEMU");
 		if (xen_core) {
@@ -2196,7 +2197,8 @@ dump_Elf64_Nhdr(Elf64_Off offset, int st
 #endif
 	default:
 		xen_core = STRNEQ(buf, "XEN CORE") || STRNEQ(buf, "Xen");
-		vmcoreinfo = STRNEQ(buf, "VMCOREINFO");
+		if (!STRNEQ(buf, "VMCOREINFO_XEN"))
+			vmcoreinfo = STRNEQ(buf, "VMCOREINFO");
 		eraseinfo = STRNEQ(buf, "ERASEINFO");
 		qemuinfo = STRNEQ(buf, "QEMU");
                 if (xen_core) {

Dave







More information about the Crash-utility mailing list