|
@@ -451,11 +451,13 @@ static void *get_vmcoreinfo_old(unsigned long *size)
|
|
|
if (copy_oldmem_kernel(nt_name, addr + sizeof(note),
|
|
|
sizeof(nt_name) - 1))
|
|
|
return NULL;
|
|
|
- if (strcmp(nt_name, "VMCOREINFO") != 0)
|
|
|
+ if (strcmp(nt_name, VMCOREINFO_NOTE_NAME) != 0)
|
|
|
return NULL;
|
|
|
vmcoreinfo = kzalloc_panic(note.n_descsz);
|
|
|
- if (copy_oldmem_kernel(vmcoreinfo, addr + 24, note.n_descsz))
|
|
|
+ if (copy_oldmem_kernel(vmcoreinfo, addr + 24, note.n_descsz)) {
|
|
|
+ kfree(vmcoreinfo);
|
|
|
return NULL;
|
|
|
+ }
|
|
|
*size = note.n_descsz;
|
|
|
return vmcoreinfo;
|
|
|
}
|
|
@@ -465,15 +467,20 @@ static void *get_vmcoreinfo_old(unsigned long *size)
|
|
|
*/
|
|
|
static void *nt_vmcoreinfo(void *ptr)
|
|
|
{
|
|
|
+ const char *name = VMCOREINFO_NOTE_NAME;
|
|
|
unsigned long size;
|
|
|
void *vmcoreinfo;
|
|
|
|
|
|
vmcoreinfo = os_info_old_entry(OS_INFO_VMCOREINFO, &size);
|
|
|
- if (!vmcoreinfo)
|
|
|
- vmcoreinfo = get_vmcoreinfo_old(&size);
|
|
|
+ if (vmcoreinfo)
|
|
|
+ return nt_init_name(ptr, 0, vmcoreinfo, size, name);
|
|
|
+
|
|
|
+ vmcoreinfo = get_vmcoreinfo_old(&size);
|
|
|
if (!vmcoreinfo)
|
|
|
return ptr;
|
|
|
- return nt_init_name(ptr, 0, vmcoreinfo, size, "VMCOREINFO");
|
|
|
+ ptr = nt_init_name(ptr, 0, vmcoreinfo, size, name);
|
|
|
+ kfree(vmcoreinfo);
|
|
|
+ return ptr;
|
|
|
}
|
|
|
|
|
|
static size_t nt_vmcoreinfo_size(void)
|