[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