diff options
Diffstat (limited to 'binutils/elfedit.c')
-rw-r--r-- | binutils/elfedit.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/binutils/elfedit.c b/binutils/elfedit.c index 1178d8a..43c319f 100644 --- a/binutils/elfedit.c +++ b/binutils/elfedit.c @@ -105,7 +105,18 @@ update_gnu_property (const char *file_name, FILE *file) if (map == MAP_FAILED) { error (_("%s: mmap () failed\n"), file_name); - return 0; + return 1; + } + + if ((elf_header.e_ident[EI_CLASS] == ELFCLASS32 + ? sizeof (Elf32_External_Phdr) + : sizeof (Elf64_External_Phdr)) != elf_header.e_phentsize + || elf_header.e_phoff > (size_t) st_buf.st_size + || (elf_header.e_phnum * (size_t) elf_header.e_phentsize + > st_buf.st_size - elf_header.e_phoff)) + { + error (_("%s: can't read program headers\n"), file_name); + return 1; } phdrs = xmalloc (elf_header.e_phnum * sizeof (*phdrs)); |