mirror of
https://git.yoctoproject.org/poky
synced 2026-05-02 18:32:15 +02:00
ldconfig-native: fix a endian-ness bug
Some header fields of ELF were read with wrong size on 64bit big-endian machine, fix it by reading the fields with read64 instead of read32. (From OE-Core rev: adbf0b1fdf897076e5e3dec2443c8927f315c2e6) Signed-off-by: Par Olsson <Par.Olsson@windriver.com> Signed-off-by: Shan Hai <shan.hai@windriver.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
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
|
||||
@@ -12,6 +12,7 @@ SRC_URI = "file://ldconfig-native-2.12.1.tar.bz2 \
|
||||
file://flag_fix.patch \
|
||||
file://endianess-header.patch \
|
||||
file://ldconfig-default-to-all-multilib-dirs.patch \
|
||||
file://endian-ness_handling_fix.patch \
|
||||
"
|
||||
|
||||
PR = "r2"
|
||||
|
||||
Reference in New Issue
Block a user