From: Zhang Yanfei <zhangyanfei@cn.fujitsu.com> To: HATAYAMA Daisuke <d.hatayama@jp.fujitsu.com> Cc: kexec@lists.infradead.org, heiko.carstens@de.ibm.com, linux-kernel@vger.kernel.org, lisa.mitchell@hp.com, kumagai-atsushi@mxc.nes.nec.co.jp, ebiederm@xmission.com, akpm@linux-foundation.org, cpw@sgi.com, vgoyal@redhat.com Subject: Re: [PATCH v2 01/20] vmcore: refer to e_phoff member explicitly Date: Sun, 10 Mar 2013 14:46:31 +0800 [thread overview] Message-ID: <513C2C47.5020008@cn.fujitsu.com> (raw) In-Reply-To: <5135A054.7010401@cn.fujitsu.com> 于 2013年03月05日 15:35, Zhang Yanfei 写道: > 于 2013年03月02日 16:35, HATAYAMA Daisuke 写道: >> Code around /proc/vmcore currently assumes program header table is >> next to ELF header. But future change can break the assumption on >> kexec-tools and the 1st kernel. To avoid worst case, now refer to >> e_phoff member that indicates position of program header table in >> file-offset. > > Reviewed-by: Zhang Yanfei <zhangyanfei@cn.fujitsu.com> > >> >> Signed-off-by: HATAYAMA Daisuke <d.hatayama@jp.fujitsu.com> >> --- >> >> fs/proc/vmcore.c | 40 ++++++++++++++++++++-------------------- >> 1 files changed, 20 insertions(+), 20 deletions(-) >> >> diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c >> index b870f74..abf4f01 100644 >> --- a/fs/proc/vmcore.c >> +++ b/fs/proc/vmcore.c >> @@ -221,8 +221,8 @@ static u64 __init get_vmcore_size_elf64(char *elfptr) >> Elf64_Phdr *phdr_ptr; >> >> ehdr_ptr = (Elf64_Ehdr *)elfptr; >> - phdr_ptr = (Elf64_Phdr*)(elfptr + sizeof(Elf64_Ehdr)); >> - size = sizeof(Elf64_Ehdr) + ((ehdr_ptr->e_phnum) * sizeof(Elf64_Phdr)); >> + phdr_ptr = (Elf64_Phdr*)(elfptr + ehdr_ptr->e_phoff); >> + size = ehdr_ptr->e_phoff + ((ehdr_ptr->e_phnum) * sizeof(Elf64_Phdr)); >> for (i = 0; i < ehdr_ptr->e_phnum; i++) { >> size += phdr_ptr->p_memsz; >> phdr_ptr++; >> @@ -238,8 +238,8 @@ static u64 __init get_vmcore_size_elf32(char *elfptr) >> Elf32_Phdr *phdr_ptr; >> >> ehdr_ptr = (Elf32_Ehdr *)elfptr; >> - phdr_ptr = (Elf32_Phdr*)(elfptr + sizeof(Elf32_Ehdr)); >> - size = sizeof(Elf32_Ehdr) + ((ehdr_ptr->e_phnum) * sizeof(Elf32_Phdr)); >> + phdr_ptr = (Elf32_Phdr*)(elfptr + ehdr_ptr->e_phoff); >> + size = ehdr_ptr->e_phoff + ((ehdr_ptr->e_phnum) * sizeof(Elf32_Phdr)); >> for (i = 0; i < ehdr_ptr->e_phnum; i++) { >> size += phdr_ptr->p_memsz; >> phdr_ptr++; >> @@ -259,7 +259,7 @@ static int __init merge_note_headers_elf64(char *elfptr, size_t *elfsz, >> u64 phdr_sz = 0, note_off; >> >> ehdr_ptr = (Elf64_Ehdr *)elfptr; >> - phdr_ptr = (Elf64_Phdr*)(elfptr + sizeof(Elf64_Ehdr)); >> + phdr_ptr = (Elf64_Phdr*)(elfptr + ehdr_ptr->e_phoff); >> for (i = 0; i < ehdr_ptr->e_phnum; i++, phdr_ptr++) { >> int j; >> void *notes_section; >> @@ -305,7 +305,7 @@ static int __init merge_note_headers_elf64(char *elfptr, size_t *elfsz, >> /* Prepare merged PT_NOTE program header. */ >> phdr.p_type = PT_NOTE; >> phdr.p_flags = 0; >> - note_off = sizeof(Elf64_Ehdr) + >> + note_off = ehdr_ptr->e_phoff + >> (ehdr_ptr->e_phnum - nr_ptnote +1) * sizeof(Elf64_Phdr); >> phdr.p_offset = note_off; >> phdr.p_vaddr = phdr.p_paddr = 0; >> @@ -313,14 +313,14 @@ static int __init merge_note_headers_elf64(char *elfptr, size_t *elfsz, >> phdr.p_align = 0; >> >> /* Add merged PT_NOTE program header*/ >> - tmp = elfptr + sizeof(Elf64_Ehdr); >> + tmp = elfptr + ehdr_ptr->e_phoff; >> memcpy(tmp, &phdr, sizeof(phdr)); >> tmp += sizeof(phdr); >> >> /* Remove unwanted PT_NOTE program headers. */ >> i = (nr_ptnote - 1) * sizeof(Elf64_Phdr); >> *elfsz = *elfsz - i; >> - memmove(tmp, tmp+i, ((*elfsz)-sizeof(Elf64_Ehdr)-sizeof(Elf64_Phdr))); >> + memmove(tmp, tmp+i, ((*elfsz)-ehdr_ptr->e_phoff-sizeof(Elf64_Phdr))); >> >> /* Modify e_phnum to reflect merged headers. */ >> ehdr_ptr->e_phnum = ehdr_ptr->e_phnum - nr_ptnote + 1; >> @@ -340,7 +340,7 @@ static int __init merge_note_headers_elf32(char *elfptr, size_t *elfsz, >> u64 phdr_sz = 0, note_off; >> >> ehdr_ptr = (Elf32_Ehdr *)elfptr; >> - phdr_ptr = (Elf32_Phdr*)(elfptr + sizeof(Elf32_Ehdr)); >> + phdr_ptr = (Elf32_Phdr*)(elfptr + ehdr_ptr->e_phoff); >> for (i = 0; i < ehdr_ptr->e_phnum; i++, phdr_ptr++) { >> int j; >> void *notes_section; >> @@ -386,7 +386,7 @@ static int __init merge_note_headers_elf32(char *elfptr, size_t *elfsz, >> /* Prepare merged PT_NOTE program header. */ >> phdr.p_type = PT_NOTE; >> phdr.p_flags = 0; >> - note_off = sizeof(Elf32_Ehdr) + >> + note_off = ehdr_ptr->e_phoff + >> (ehdr_ptr->e_phnum - nr_ptnote +1) * sizeof(Elf32_Phdr); >> phdr.p_offset = note_off; >> phdr.p_vaddr = phdr.p_paddr = 0; >> @@ -394,14 +394,14 @@ static int __init merge_note_headers_elf32(char *elfptr, size_t *elfsz, >> phdr.p_align = 0; >> >> /* Add merged PT_NOTE program header*/ >> - tmp = elfptr + sizeof(Elf32_Ehdr); >> + tmp = elfptr + ehdr_ptr->e_phoff; >> memcpy(tmp, &phdr, sizeof(phdr)); >> tmp += sizeof(phdr); >> >> /* Remove unwanted PT_NOTE program headers. */ >> i = (nr_ptnote - 1) * sizeof(Elf32_Phdr); >> *elfsz = *elfsz - i; >> - memmove(tmp, tmp+i, ((*elfsz)-sizeof(Elf32_Ehdr)-sizeof(Elf32_Phdr))); >> + memmove(tmp, tmp+i, ((*elfsz)-ehdr_ptr->e_phoff-sizeof(Elf32_Phdr))); >> >> /* Modify e_phnum to reflect merged headers. */ >> ehdr_ptr->e_phnum = ehdr_ptr->e_phnum - nr_ptnote + 1; >> @@ -422,10 +422,10 @@ static int __init process_ptload_program_headers_elf64(char *elfptr, >> struct vmcore *new; >> >> ehdr_ptr = (Elf64_Ehdr *)elfptr; >> - phdr_ptr = (Elf64_Phdr*)(elfptr + sizeof(Elf64_Ehdr)); /* PT_NOTE hdr */ >> + phdr_ptr = (Elf64_Phdr*)(elfptr + ehdr_ptr->e_phoff); /* PT_NOTE hdr */ >> >> /* First program header is PT_NOTE header. */ >> - vmcore_off = sizeof(Elf64_Ehdr) + >> + vmcore_off = ehdr_ptr->e_phoff + >> (ehdr_ptr->e_phnum) * sizeof(Elf64_Phdr) + >> phdr_ptr->p_memsz; /* Note sections */ >> >> @@ -459,10 +459,10 @@ static int __init process_ptload_program_headers_elf32(char *elfptr, >> struct vmcore *new; >> >> ehdr_ptr = (Elf32_Ehdr *)elfptr; >> - phdr_ptr = (Elf32_Phdr*)(elfptr + sizeof(Elf32_Ehdr)); /* PT_NOTE hdr */ >> + phdr_ptr = (Elf32_Phdr*)(elfptr + ehdr_ptr->e_phoff); /* PT_NOTE hdr */ >> >> /* First program header is PT_NOTE header. */ >> - vmcore_off = sizeof(Elf32_Ehdr) + >> + vmcore_off = ehdr_ptr->e_phoff + >> (ehdr_ptr->e_phnum) * sizeof(Elf32_Phdr) + >> phdr_ptr->p_memsz; /* Note sections */ >> >> @@ -496,7 +496,7 @@ static void __init set_vmcore_list_offsets_elf64(char *elfptr, >> ehdr_ptr = (Elf64_Ehdr *)elfptr; >> >> /* Skip Elf header and program headers. */ >> - vmcore_off = sizeof(Elf64_Ehdr) + >> + vmcore_off = ehdr_ptr->e_phoff + >> (ehdr_ptr->e_phnum) * sizeof(Elf64_Phdr); >> >> list_for_each_entry(m, vc_list, list) { >> @@ -516,7 +516,7 @@ static void __init set_vmcore_list_offsets_elf32(char *elfptr, >> ehdr_ptr = (Elf32_Ehdr *)elfptr; >> >> /* Skip Elf header and program headers. */ >> - vmcore_off = sizeof(Elf32_Ehdr) + >> + vmcore_off = ehdr_ptr->e_phoff + >> (ehdr_ptr->e_phnum) * sizeof(Elf32_Phdr); >> >> list_for_each_entry(m, vc_list, list) { >> @@ -553,7 +553,7 @@ static int __init parse_crash_elf64_headers(void) >> } >> >> /* Read in all elf headers. */ >> - elfcorebuf_sz = sizeof(Elf64_Ehdr) + ehdr.e_phnum * sizeof(Elf64_Phdr); >> + elfcorebuf_sz = ehdr.e_phoff + ehdr.e_phnum * sizeof(Elf64_Phdr); One minor suggestion. Previously, when the code assumes program headers are following immediately the ELF header, it uses elfcorebuf_sz = sizeof(Elf64_Ehdr) + ehdr.e_phnum * sizeof(Elf64_Phdr); to calculate the size of ELF header and ELF program headers This patch avoids the assumption, and uses ehdr.e_phoff to get the program headers' address. But it will read unrelated contents into elfcorebuf if program headers are not following immediately the ELF header. So could the code be: elfcorebuf_sz = sizeof(Elf64_Ehdr) + ehdr.e_phnum * sizeof(Elf64_Phdr); addr = elfcorehdr_addr + ehdr.e_phoff; memcpy(elfcorebuf, &ehdr, sizeof(Elf64_Ehdr)); read_from_oldmem(elfcorebuf + sizeof(Elf64_Ehdr), elfcorebuf_sz - sizeof(Elf64_Ehdr), &addr, 0); (Elf64_Ehdr *)elfcorebuf->e_phoff = sizeof(Elf64_Ehdr); >> elfcorebuf = kmalloc(elfcorebuf_sz, GFP_KERNEL); >> if (!elfcorebuf) >> return -ENOMEM; >> @@ -608,7 +608,7 @@ static int __init parse_crash_elf32_headers(void) >> } >> >> /* Read in all elf headers. */ >> - elfcorebuf_sz = sizeof(Elf32_Ehdr) + ehdr.e_phnum * sizeof(Elf32_Phdr); >> + elfcorebuf_sz = ehdr.e_phoff + ehdr.e_phnum * sizeof(Elf32_Phdr); >> elfcorebuf = kmalloc(elfcorebuf_sz, GFP_KERNEL); >> if (!elfcorebuf) >> return -ENOMEM; >> >> >> _______________________________________________ >> kexec mailing list >> kexec@lists.infradead.org >> http://lists.infradead.org/mailman/listinfo/kexec >> > > > _______________________________________________ > kexec mailing list > kexec@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/kexec
WARNING: multiple messages have this Message-ID (diff)
From: Zhang Yanfei <zhangyanfei@cn.fujitsu.com> To: HATAYAMA Daisuke <d.hatayama@jp.fujitsu.com> Cc: kexec@lists.infradead.org, heiko.carstens@de.ibm.com, linux-kernel@vger.kernel.org, lisa.mitchell@hp.com, kumagai-atsushi@mxc.nes.nec.co.jp, ebiederm@xmission.com, akpm@linux-foundation.org, cpw@sgi.com, vgoyal@redhat.com Subject: Re: [PATCH v2 01/20] vmcore: refer to e_phoff member explicitly Date: Sun, 10 Mar 2013 14:46:31 +0800 [thread overview] Message-ID: <513C2C47.5020008@cn.fujitsu.com> (raw) In-Reply-To: <5135A054.7010401@cn.fujitsu.com> 于 2013年03月05日 15:35, Zhang Yanfei 写道: > 于 2013年03月02日 16:35, HATAYAMA Daisuke 写道: >> Code around /proc/vmcore currently assumes program header table is >> next to ELF header. But future change can break the assumption on >> kexec-tools and the 1st kernel. To avoid worst case, now refer to >> e_phoff member that indicates position of program header table in >> file-offset. > > Reviewed-by: Zhang Yanfei <zhangyanfei@cn.fujitsu.com> > >> >> Signed-off-by: HATAYAMA Daisuke <d.hatayama@jp.fujitsu.com> >> --- >> >> fs/proc/vmcore.c | 40 ++++++++++++++++++++-------------------- >> 1 files changed, 20 insertions(+), 20 deletions(-) >> >> diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c >> index b870f74..abf4f01 100644 >> --- a/fs/proc/vmcore.c >> +++ b/fs/proc/vmcore.c >> @@ -221,8 +221,8 @@ static u64 __init get_vmcore_size_elf64(char *elfptr) >> Elf64_Phdr *phdr_ptr; >> >> ehdr_ptr = (Elf64_Ehdr *)elfptr; >> - phdr_ptr = (Elf64_Phdr*)(elfptr + sizeof(Elf64_Ehdr)); >> - size = sizeof(Elf64_Ehdr) + ((ehdr_ptr->e_phnum) * sizeof(Elf64_Phdr)); >> + phdr_ptr = (Elf64_Phdr*)(elfptr + ehdr_ptr->e_phoff); >> + size = ehdr_ptr->e_phoff + ((ehdr_ptr->e_phnum) * sizeof(Elf64_Phdr)); >> for (i = 0; i < ehdr_ptr->e_phnum; i++) { >> size += phdr_ptr->p_memsz; >> phdr_ptr++; >> @@ -238,8 +238,8 @@ static u64 __init get_vmcore_size_elf32(char *elfptr) >> Elf32_Phdr *phdr_ptr; >> >> ehdr_ptr = (Elf32_Ehdr *)elfptr; >> - phdr_ptr = (Elf32_Phdr*)(elfptr + sizeof(Elf32_Ehdr)); >> - size = sizeof(Elf32_Ehdr) + ((ehdr_ptr->e_phnum) * sizeof(Elf32_Phdr)); >> + phdr_ptr = (Elf32_Phdr*)(elfptr + ehdr_ptr->e_phoff); >> + size = ehdr_ptr->e_phoff + ((ehdr_ptr->e_phnum) * sizeof(Elf32_Phdr)); >> for (i = 0; i < ehdr_ptr->e_phnum; i++) { >> size += phdr_ptr->p_memsz; >> phdr_ptr++; >> @@ -259,7 +259,7 @@ static int __init merge_note_headers_elf64(char *elfptr, size_t *elfsz, >> u64 phdr_sz = 0, note_off; >> >> ehdr_ptr = (Elf64_Ehdr *)elfptr; >> - phdr_ptr = (Elf64_Phdr*)(elfptr + sizeof(Elf64_Ehdr)); >> + phdr_ptr = (Elf64_Phdr*)(elfptr + ehdr_ptr->e_phoff); >> for (i = 0; i < ehdr_ptr->e_phnum; i++, phdr_ptr++) { >> int j; >> void *notes_section; >> @@ -305,7 +305,7 @@ static int __init merge_note_headers_elf64(char *elfptr, size_t *elfsz, >> /* Prepare merged PT_NOTE program header. */ >> phdr.p_type = PT_NOTE; >> phdr.p_flags = 0; >> - note_off = sizeof(Elf64_Ehdr) + >> + note_off = ehdr_ptr->e_phoff + >> (ehdr_ptr->e_phnum - nr_ptnote +1) * sizeof(Elf64_Phdr); >> phdr.p_offset = note_off; >> phdr.p_vaddr = phdr.p_paddr = 0; >> @@ -313,14 +313,14 @@ static int __init merge_note_headers_elf64(char *elfptr, size_t *elfsz, >> phdr.p_align = 0; >> >> /* Add merged PT_NOTE program header*/ >> - tmp = elfptr + sizeof(Elf64_Ehdr); >> + tmp = elfptr + ehdr_ptr->e_phoff; >> memcpy(tmp, &phdr, sizeof(phdr)); >> tmp += sizeof(phdr); >> >> /* Remove unwanted PT_NOTE program headers. */ >> i = (nr_ptnote - 1) * sizeof(Elf64_Phdr); >> *elfsz = *elfsz - i; >> - memmove(tmp, tmp+i, ((*elfsz)-sizeof(Elf64_Ehdr)-sizeof(Elf64_Phdr))); >> + memmove(tmp, tmp+i, ((*elfsz)-ehdr_ptr->e_phoff-sizeof(Elf64_Phdr))); >> >> /* Modify e_phnum to reflect merged headers. */ >> ehdr_ptr->e_phnum = ehdr_ptr->e_phnum - nr_ptnote + 1; >> @@ -340,7 +340,7 @@ static int __init merge_note_headers_elf32(char *elfptr, size_t *elfsz, >> u64 phdr_sz = 0, note_off; >> >> ehdr_ptr = (Elf32_Ehdr *)elfptr; >> - phdr_ptr = (Elf32_Phdr*)(elfptr + sizeof(Elf32_Ehdr)); >> + phdr_ptr = (Elf32_Phdr*)(elfptr + ehdr_ptr->e_phoff); >> for (i = 0; i < ehdr_ptr->e_phnum; i++, phdr_ptr++) { >> int j; >> void *notes_section; >> @@ -386,7 +386,7 @@ static int __init merge_note_headers_elf32(char *elfptr, size_t *elfsz, >> /* Prepare merged PT_NOTE program header. */ >> phdr.p_type = PT_NOTE; >> phdr.p_flags = 0; >> - note_off = sizeof(Elf32_Ehdr) + >> + note_off = ehdr_ptr->e_phoff + >> (ehdr_ptr->e_phnum - nr_ptnote +1) * sizeof(Elf32_Phdr); >> phdr.p_offset = note_off; >> phdr.p_vaddr = phdr.p_paddr = 0; >> @@ -394,14 +394,14 @@ static int __init merge_note_headers_elf32(char *elfptr, size_t *elfsz, >> phdr.p_align = 0; >> >> /* Add merged PT_NOTE program header*/ >> - tmp = elfptr + sizeof(Elf32_Ehdr); >> + tmp = elfptr + ehdr_ptr->e_phoff; >> memcpy(tmp, &phdr, sizeof(phdr)); >> tmp += sizeof(phdr); >> >> /* Remove unwanted PT_NOTE program headers. */ >> i = (nr_ptnote - 1) * sizeof(Elf32_Phdr); >> *elfsz = *elfsz - i; >> - memmove(tmp, tmp+i, ((*elfsz)-sizeof(Elf32_Ehdr)-sizeof(Elf32_Phdr))); >> + memmove(tmp, tmp+i, ((*elfsz)-ehdr_ptr->e_phoff-sizeof(Elf32_Phdr))); >> >> /* Modify e_phnum to reflect merged headers. */ >> ehdr_ptr->e_phnum = ehdr_ptr->e_phnum - nr_ptnote + 1; >> @@ -422,10 +422,10 @@ static int __init process_ptload_program_headers_elf64(char *elfptr, >> struct vmcore *new; >> >> ehdr_ptr = (Elf64_Ehdr *)elfptr; >> - phdr_ptr = (Elf64_Phdr*)(elfptr + sizeof(Elf64_Ehdr)); /* PT_NOTE hdr */ >> + phdr_ptr = (Elf64_Phdr*)(elfptr + ehdr_ptr->e_phoff); /* PT_NOTE hdr */ >> >> /* First program header is PT_NOTE header. */ >> - vmcore_off = sizeof(Elf64_Ehdr) + >> + vmcore_off = ehdr_ptr->e_phoff + >> (ehdr_ptr->e_phnum) * sizeof(Elf64_Phdr) + >> phdr_ptr->p_memsz; /* Note sections */ >> >> @@ -459,10 +459,10 @@ static int __init process_ptload_program_headers_elf32(char *elfptr, >> struct vmcore *new; >> >> ehdr_ptr = (Elf32_Ehdr *)elfptr; >> - phdr_ptr = (Elf32_Phdr*)(elfptr + sizeof(Elf32_Ehdr)); /* PT_NOTE hdr */ >> + phdr_ptr = (Elf32_Phdr*)(elfptr + ehdr_ptr->e_phoff); /* PT_NOTE hdr */ >> >> /* First program header is PT_NOTE header. */ >> - vmcore_off = sizeof(Elf32_Ehdr) + >> + vmcore_off = ehdr_ptr->e_phoff + >> (ehdr_ptr->e_phnum) * sizeof(Elf32_Phdr) + >> phdr_ptr->p_memsz; /* Note sections */ >> >> @@ -496,7 +496,7 @@ static void __init set_vmcore_list_offsets_elf64(char *elfptr, >> ehdr_ptr = (Elf64_Ehdr *)elfptr; >> >> /* Skip Elf header and program headers. */ >> - vmcore_off = sizeof(Elf64_Ehdr) + >> + vmcore_off = ehdr_ptr->e_phoff + >> (ehdr_ptr->e_phnum) * sizeof(Elf64_Phdr); >> >> list_for_each_entry(m, vc_list, list) { >> @@ -516,7 +516,7 @@ static void __init set_vmcore_list_offsets_elf32(char *elfptr, >> ehdr_ptr = (Elf32_Ehdr *)elfptr; >> >> /* Skip Elf header and program headers. */ >> - vmcore_off = sizeof(Elf32_Ehdr) + >> + vmcore_off = ehdr_ptr->e_phoff + >> (ehdr_ptr->e_phnum) * sizeof(Elf32_Phdr); >> >> list_for_each_entry(m, vc_list, list) { >> @@ -553,7 +553,7 @@ static int __init parse_crash_elf64_headers(void) >> } >> >> /* Read in all elf headers. */ >> - elfcorebuf_sz = sizeof(Elf64_Ehdr) + ehdr.e_phnum * sizeof(Elf64_Phdr); >> + elfcorebuf_sz = ehdr.e_phoff + ehdr.e_phnum * sizeof(Elf64_Phdr); One minor suggestion. Previously, when the code assumes program headers are following immediately the ELF header, it uses elfcorebuf_sz = sizeof(Elf64_Ehdr) + ehdr.e_phnum * sizeof(Elf64_Phdr); to calculate the size of ELF header and ELF program headers This patch avoids the assumption, and uses ehdr.e_phoff to get the program headers' address. But it will read unrelated contents into elfcorebuf if program headers are not following immediately the ELF header. So could the code be: elfcorebuf_sz = sizeof(Elf64_Ehdr) + ehdr.e_phnum * sizeof(Elf64_Phdr); addr = elfcorehdr_addr + ehdr.e_phoff; memcpy(elfcorebuf, &ehdr, sizeof(Elf64_Ehdr)); read_from_oldmem(elfcorebuf + sizeof(Elf64_Ehdr), elfcorebuf_sz - sizeof(Elf64_Ehdr), &addr, 0); (Elf64_Ehdr *)elfcorebuf->e_phoff = sizeof(Elf64_Ehdr); >> elfcorebuf = kmalloc(elfcorebuf_sz, GFP_KERNEL); >> if (!elfcorebuf) >> return -ENOMEM; >> @@ -608,7 +608,7 @@ static int __init parse_crash_elf32_headers(void) >> } >> >> /* Read in all elf headers. */ >> - elfcorebuf_sz = sizeof(Elf32_Ehdr) + ehdr.e_phnum * sizeof(Elf32_Phdr); >> + elfcorebuf_sz = ehdr.e_phoff + ehdr.e_phnum * sizeof(Elf32_Phdr); >> elfcorebuf = kmalloc(elfcorebuf_sz, GFP_KERNEL); >> if (!elfcorebuf) >> return -ENOMEM; >> >> >> _______________________________________________ >> kexec mailing list >> kexec@lists.infradead.org >> http://lists.infradead.org/mailman/listinfo/kexec >> > > > _______________________________________________ > kexec mailing list > kexec@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/kexec _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec
next prev parent reply other threads:[~2013-03-10 6:48 UTC|newest] Thread overview: 82+ messages / expand[flat|nested] mbox.gz Atom feed top 2013-03-02 8:35 [PATCH v2 00/20] kdump, vmcore: support mmap() on /proc/vmcore HATAYAMA Daisuke 2013-03-02 8:35 ` HATAYAMA Daisuke 2013-03-02 8:35 ` [PATCH v2 01/20] vmcore: refer to e_phoff member explicitly HATAYAMA Daisuke 2013-03-02 8:35 ` HATAYAMA Daisuke 2013-03-05 7:35 ` Zhang Yanfei 2013-03-05 7:35 ` Zhang Yanfei 2013-03-10 6:46 ` Zhang Yanfei [this message] 2013-03-10 6:46 ` Zhang Yanfei 2013-03-11 0:31 ` HATAYAMA Daisuke 2013-03-11 0:31 ` HATAYAMA Daisuke 2013-03-11 17:36 ` Vivek Goyal 2013-03-11 17:36 ` Vivek Goyal 2013-03-02 8:35 ` [PATCH v2 02/20] vmcore: rearrange program headers without assuming consequtive PT_NOTE entries HATAYAMA Daisuke 2013-03-02 8:35 ` HATAYAMA Daisuke 2013-03-05 8:36 ` Zhang Yanfei 2013-03-05 8:36 ` Zhang Yanfei 2013-03-05 9:02 ` HATAYAMA Daisuke 2013-03-05 9:02 ` HATAYAMA Daisuke 2013-03-05 9:35 ` Zhang Yanfei 2013-03-05 9:35 ` Zhang Yanfei 2013-03-02 8:36 ` [PATCH v2 03/20] vmcore, sysfs: export ELF note segment size instead of vmcoreinfo data size HATAYAMA Daisuke 2013-03-02 8:36 ` HATAYAMA Daisuke 2013-03-05 9:29 ` Zhang Yanfei 2013-03-05 9:29 ` Zhang Yanfei 2013-03-06 0:07 ` HATAYAMA Daisuke 2013-03-06 0:07 ` HATAYAMA Daisuke 2013-03-02 8:36 ` [PATCH v2 04/20] vmcore: allocate buffer for ELF headers on page-size alignment HATAYAMA Daisuke 2013-03-02 8:36 ` HATAYAMA Daisuke 2013-03-06 6:57 ` Zhang Yanfei 2013-03-06 6:57 ` Zhang Yanfei 2013-03-06 9:14 ` HATAYAMA Daisuke 2013-03-06 9:14 ` HATAYAMA Daisuke 2013-03-02 8:36 ` [PATCH v2 05/20] vmcore: round up buffer size of ELF headers by PAGE_SIZE HATAYAMA Daisuke 2013-03-02 8:36 ` HATAYAMA Daisuke 2013-03-06 15:51 ` Yanfei Zhang 2013-03-06 15:51 ` Yanfei Zhang 2013-03-02 8:36 ` [PATCH v2 06/20] vmcore, procfs: introduce a flag to distinguish objects copied in 2nd kernel HATAYAMA Daisuke 2013-03-02 8:36 ` HATAYAMA Daisuke 2013-03-06 15:55 ` Yanfei Zhang 2013-03-06 15:55 ` Yanfei Zhang 2013-03-02 8:36 ` [PATCH v2 07/20] vmcore: copy non page-size aligned head and tail pages " HATAYAMA Daisuke 2013-03-02 8:36 ` HATAYAMA Daisuke 2013-03-10 6:16 ` Zhang Yanfei 2013-03-10 6:16 ` Zhang Yanfei 2013-03-11 0:27 ` HATAYAMA Daisuke 2013-03-11 0:27 ` HATAYAMA Daisuke 2013-03-02 8:36 ` [PATCH v2 08/20] vmcore: modify vmcore clean-up function to free buffer on " HATAYAMA Daisuke 2013-03-02 8:36 ` HATAYAMA Daisuke 2013-03-02 8:36 ` [PATCH v2 09/20] vmcore: clean up read_vmcore() HATAYAMA Daisuke 2013-03-02 8:36 ` HATAYAMA Daisuke 2013-03-02 8:36 ` [PATCH v2 10/20] vmcore: read buffers for vmcore objects copied from old memory HATAYAMA Daisuke 2013-03-02 8:36 ` HATAYAMA Daisuke 2013-03-02 8:36 ` [PATCH v2 11/20] vmcore: allocate per-cpu crash_notes objects on page-size boundary HATAYAMA Daisuke 2013-03-02 8:36 ` HATAYAMA Daisuke 2013-03-02 8:36 ` [PATCH v2 12/20] kexec: allocate vmcoreinfo note buffer " HATAYAMA Daisuke 2013-03-02 8:36 ` HATAYAMA Daisuke 2013-03-02 8:37 ` [PATCH v2 13/20] kexec, elf: introduce NT_VMCORE_DEBUGINFO note type HATAYAMA Daisuke 2013-03-02 8:37 ` HATAYAMA Daisuke 2013-03-02 8:37 ` [PATCH v2 14/20] elf: introduce NT_VMCORE_PAD type HATAYAMA Daisuke 2013-03-02 8:37 ` HATAYAMA Daisuke 2013-03-02 8:37 ` [PATCH v2 15/20] kexec: fill note buffers by NT_VMCORE_PAD notes in page-size boundary HATAYAMA Daisuke 2013-03-02 8:37 ` HATAYAMA Daisuke 2013-03-07 10:11 ` Zhang Yanfei 2013-03-07 10:11 ` Zhang Yanfei 2013-03-08 1:55 ` HATAYAMA Daisuke 2013-03-08 1:55 ` HATAYAMA Daisuke 2013-03-08 13:02 ` Yanfei Zhang 2013-03-08 13:02 ` Yanfei Zhang 2013-03-09 3:46 ` HATAYAMA Daisuke 2013-03-09 3:46 ` HATAYAMA Daisuke 2013-03-10 2:33 ` Zhang Yanfei 2013-03-10 2:33 ` Zhang Yanfei 2013-03-02 8:37 ` [PATCH v2 16/20] vmcore: check NT_VMCORE_PAD as a mark indicating the end of ELF note buffer HATAYAMA Daisuke 2013-03-02 8:37 ` HATAYAMA Daisuke 2013-03-02 8:37 ` [PATCH v2 17/20] vmcore: check if vmcore objects satify mmap()'s page-size boundary requirement HATAYAMA Daisuke 2013-03-02 8:37 ` HATAYAMA Daisuke 2013-03-02 8:37 ` [PATCH v2 18/20] vmcore: round-up offset of vmcore object in page-size boundary HATAYAMA Daisuke 2013-03-02 8:37 ` HATAYAMA Daisuke 2013-03-02 8:37 ` [PATCH v2 19/20] vmcore: count holes generated by round-up operation for vmcore size HATAYAMA Daisuke 2013-03-02 8:37 ` HATAYAMA Daisuke 2013-03-02 8:37 ` [PATCH v2 20/20] vmcore: introduce mmap_vmcore() HATAYAMA Daisuke 2013-03-02 8:37 ` HATAYAMA Daisuke
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=513C2C47.5020008@cn.fujitsu.com \ --to=zhangyanfei@cn.fujitsu.com \ --cc=akpm@linux-foundation.org \ --cc=cpw@sgi.com \ --cc=d.hatayama@jp.fujitsu.com \ --cc=ebiederm@xmission.com \ --cc=heiko.carstens@de.ibm.com \ --cc=kexec@lists.infradead.org \ --cc=kumagai-atsushi@mxc.nes.nec.co.jp \ --cc=linux-kernel@vger.kernel.org \ --cc=lisa.mitchell@hp.com \ --cc=vgoyal@redhat.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.