Upstream-Status: Inappropriate [embedded specific] Fix problem during parsing of ELF headers for 64bit on big-endian. Some header fields were read with wrong size. 2014/10/24 Par Olsson Shan Hai diff --git a/readelflib.c b/readelflib.c index 3f5b25b..0bf0de3 100644 --- a/readelflib.c +++ b/readelflib.c @@ -261,8 +261,8 @@ process_elf_file64 (const char *file_name, const char *lib, int *flag, int i; unsigned int j; Elf64_Addr loadaddr; - unsigned int dynamic_addr; - size_t dynamic_size; + Elf64_Addr dynamic_addr; + Elf64_Xword dynamic_size; char *program_interpreter; Elf64_Ehdr *elf_header; @@ -311,7 +311,7 @@ process_elf_file64 (const char *file_name, const char *lib, int *flag, error (0, 0, _("more than one dynamic segment\n")); dynamic_addr = read64(segment->p_offset, be); - dynamic_size = read32(segment->p_filesz, be); + dynamic_size = read64(segment->p_filesz, be); break; case PT_INTERP: @@ -329,11 +329,11 @@ process_elf_file64 (const char *file_name, const char *lib, int *flag, break; case PT_NOTE: - if (!*osversion && read32(segment->p_filesz, be) >= 32 && read32(segment->p_align, be) >= 4) + if (!*osversion && read64(segment->p_filesz, be) >= 32 && read64(segment->p_align, be) >= 4) { Elf64_Word *abi_note = (Elf64_Word *) (file_contents + read64(segment->p_offset, be)); - Elf64_Addr size = read32(segment->p_filesz, be); + Elf64_Xword size = read64(segment->p_filesz, be); while (read32(abi_note [0], be) != 4 || read32(abi_note [1], be) != 16 || read32(abi_note [2], be) != 1