[PATCH] build_mem_phdrs(): check if p_paddr is invalid
Pratyush Anand
panand at redhat.com
Mon Mar 6 17:23:20 PST 2017
Hi Simon,
On Wednesday 01 March 2017 12:43 PM, Dave Young wrote:
> On 03/01/17 at 11:19am, Pratyush Anand wrote:
>> Currently, all the p_paddr of PT_LOAD headers are assigned to 0, which
>> is not correct and could be misleading, since 0 is a valid physical
>> address.
>>
>> Upstream kernel commit "464920104bf7 /proc/kcore: update physical
>> address for kcore ram and text" fixed it and now invalid PT_LOAD is
>> assigned as -1.
>>
>> kexec/arch/i386/crashdump-x86.c:get_kernel_vaddr_and_size() uses kcore
>> interface and so calls build_mem_phdrs() for kcore PT_LOAD headers.
>>
>> This patch fixes build_mem_phdrs() to check if p_paddr is invalid.
Any comment on this?
>>
>> Signed-off-by: Pratyush Anand <panand at redhat.com>
>> ---
>> kexec/kexec-elf.c | 3 ++-
>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/kexec/kexec-elf.c b/kexec/kexec-elf.c
>> index 1d6320a2f0e6..be60bbd48486 100644
>> --- a/kexec/kexec-elf.c
>> +++ b/kexec/kexec-elf.c
>> @@ -432,7 +432,8 @@ static int build_mem_phdrs(const char *buf, off_t len, struct mem_ehdr *ehdr,
>> }
>> return -1;
>> }
>> - if ((phdr->p_paddr + phdr->p_memsz) < phdr->p_paddr) {
>> + if (phdr->p_paddr != (unsigned long long)-1 &&
>> + (phdr->p_paddr + phdr->p_memsz) < phdr->p_paddr) {
>> /* The memory address wraps */
>> if (probe_debug) {
>> fprintf(stderr, "ELF address wrap around\n");
>> --
>> 2.9.3
>>
>
> Acked-by: Dave Young <dyoung at redhat.com>
>
~Pratyush
More information about the kexec
mailing list