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 <Par.Olsson@windriver.com>
|
Shan Hai <shan.hai@windriver.com>
|
|
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
|