----- 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 -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility