----- "Dave Anderson" <[email protected]> wrote:
I did the same thing to a vmcore (i.e. handcrafting the PT_NOTE
segment's p_offset field like you did), and was able to get the
crash session up with the attached patch.
Does it work for you?
Dave
Index: netdump.c
===================================================================
RCS file: /nfs/projects/cvs/crash/netdump.c,v
retrieving revision 1.93
diff -u -r1.93 netdump.c
--- netdump.c 29 Oct 2009 15:45:34 -0000 1.93
+++ netdump.c 1 Dec 2009 15:18:12 -0000
@@ -694,6 +694,9 @@
else
note32 = (Elf32_Nhdr *)nd->nt_prstatus;
+ if (!note32)
+ goto panic_task_undetermined;
+
len = sizeof(Elf32_Nhdr);
len = roundup(len + note32->n_namesz, 4);
len = roundup(len + note32->n_descsz, 4);
@@ -738,6 +741,9 @@
else
note64 = (Elf64_Nhdr *)nd->nt_prstatus;
+ if (!note64)
+ goto panic_task_undetermined;
+
len = sizeof(Elf64_Nhdr);
len = roundup(len + note64->n_namesz, 4);
user_regs = (char *)((char *)note64 + len +
@@ -1577,11 +1583,10 @@
ptr = (char *)note + sizeof(Elf32_Nhdr);
if (ptr > (nd->elf_header + nd->header_size)) {
- if (CRASHDEBUG(1))
- error(WARNING,
- "Elf32_Nhdr pointer: %lx ELF header end: %lx\n",
- (char *)note, nd->elf_header + nd->header_size);
- remaining = 0;
+ error(WARNING,
+ "Elf32_Nhdr pointer: %lx ELF header end: %lx\n",
+ (char *)note, nd->elf_header + nd->header_size);
+ return 0;
} else
remaining = (uint64_t)((nd->elf_header + nd->header_size) - ptr);
@@ -1796,11 +1801,10 @@
xen_core = vmcoreinfo = FALSE;
if (ptr > (nd->elf_header + nd->header_size)) {
- if (CRASHDEBUG(1))
- error(WARNING,
- "Elf64_Nhdr pointer: %lx ELF header end: %lx\n\n",
- (char *)note, nd->elf_header + nd->header_size);
- remaining = 0;
+ error(WARNING,
+ "Elf64_Nhdr pointer: %lx ELF header end: %lx\n\n",
+ (char *)note, nd->elf_header + nd->header_size);
+ return 0;
} else
remaining = (uint64_t)((nd->elf_header + nd->header_size) - ptr);
--
Crash-utility mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/crash-utility