mirror of
https://github.com/torvalds/linux.git
synced 2024-11-15 00:21:59 +00:00
s390/kdump: Make elfcorehdr size calculation ABI compliant
There are two ways to pass the vmcoreinfo to the crash kernel 1) via the
os_info mechanism and 2) via the lowcore->vmcore_info field. In the Linux
kernel only the second way is used. However, the first way is ABI for
stand-alone kdump. So other OSes use it to pass additional debug info. Make
the elfcorehdr size calculation aware of both possible ways.
Fixes: 8cce437fbb
("s390/kdump: Fix elfcorehdr size calculation")
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
2abe24b4b0
commit
263b0e480c
@ -478,26 +478,20 @@ static void *nt_vmcoreinfo(void *ptr)
|
|||||||
|
|
||||||
static size_t nt_vmcoreinfo_size(void)
|
static size_t nt_vmcoreinfo_size(void)
|
||||||
{
|
{
|
||||||
const char *name = "VMCOREINFO";
|
const char *name = VMCOREINFO_NOTE_NAME;
|
||||||
char nt_name[11];
|
unsigned long size;
|
||||||
Elf64_Nhdr note;
|
void *vmcoreinfo;
|
||||||
void *addr;
|
|
||||||
|
|
||||||
if (copy_oldmem_kernel(&addr, &S390_lowcore.vmcore_info, sizeof(addr)))
|
vmcoreinfo = os_info_old_entry(OS_INFO_VMCOREINFO, &size);
|
||||||
|
if (vmcoreinfo)
|
||||||
|
return nt_size_name(size, name);
|
||||||
|
|
||||||
|
vmcoreinfo = get_vmcoreinfo_old(&size);
|
||||||
|
if (!vmcoreinfo)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (copy_oldmem_kernel(¬e, addr, sizeof(note)))
|
kfree(vmcoreinfo);
|
||||||
return 0;
|
return nt_size_name(size, name);
|
||||||
|
|
||||||
memset(nt_name, 0, sizeof(nt_name));
|
|
||||||
if (copy_oldmem_kernel(nt_name, addr + sizeof(note),
|
|
||||||
sizeof(nt_name) - 1))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (strcmp(nt_name, name) != 0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return nt_size_name(note.n_descsz, name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user