static void *get_vmcoreinfo_old(unsigned long *size) { char nt_name[11], *vmcoreinfo; Elf64_Nhdr note; void *addr; if (copy_from_oldmem(&addr, &S390_lowcore.vmcore_info, sizeof(addr))) return NULL; memset(nt_name, 0, sizeof(nt_name)); if (copy_from_oldmem(¬e, addr, sizeof(note))) return NULL; if (copy_from_oldmem(nt_name, addr + sizeof(note), sizeof(nt_name) - 1)) return NULL; if (strcmp(nt_name, "VMCOREINFO") != 0) return NULL; vmcoreinfo = kzalloc_panic(note.n_descsz); if (copy_from_oldmem(vmcoreinfo, addr + 24, note.n_descsz)) return NULL; *size = note.n_descsz; return vmcoreinfo; }
/* * Initialize vmcoreinfo note (new kernel) */ static void *nt_vmcoreinfo(void *ptr) { char nt_name[11], *vmcoreinfo; Elf64_Nhdr note; void *addr; if (copy_from_oldmem(&addr, &S390_lowcore.vmcore_info, sizeof(addr))) return ptr; memset(nt_name, 0, sizeof(nt_name)); if (copy_from_oldmem(¬e, addr, sizeof(note))) return ptr; if (copy_from_oldmem(nt_name, addr + sizeof(note), sizeof(nt_name) - 1)) return ptr; if (strcmp(nt_name, "VMCOREINFO") != 0) return ptr; vmcoreinfo = kzalloc_panic(note.n_descsz + 1); if (copy_from_oldmem(vmcoreinfo, addr + 24, note.n_descsz)) return ptr; vmcoreinfo[note.n_descsz + 1] = 0; return nt_init(ptr, 0, vmcoreinfo, note.n_descsz, "VMCOREINFO"); }