mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-19 02:34:01 +08:00
s390/kdump: Fix memleak in nt_vmcoreinfo
The vmcoreinfo of a crashed system is potentially fragmented. Thus the crash kernel has an intermediate step where the vmcoreinfo is copied into a temporary, continuous buffer in the crash kernel memory. This temporary buffer is never freed. Free it now to prevent the memleak. While at it replace all occurrences of "VMCOREINFO" by its corresponding macro to prevent potential renaming issues. Signed-off-by: Philipp Rudo <prudo@linux.ibm.com> Acked-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
This commit is contained in:
parent
263b0e480c
commit
2d2e7075b8
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user