if (ehdr.e_machine != 3)
LOAD_ERROR (("ELF executable is not x86"));
if (ehdr.e_version != 1)
- LOAD_ERROR (("ELF executable hasunknown version %d",
+ LOAD_ERROR (("ELF executable has unknown version %d",
(int) ehdr.e_version));
if (ehdr.e_phentsize != sizeof (struct Elf32_Phdr))
LOAD_ERROR (("bad ELF program header size"));
{
struct Elf32_Phdr phdr;
+ if (file_ofs < 0 || file_ofs > file_length (file))
+ LOAD_ERROR (("bad file offset %ld", (long) file_ofs));
file_seek (file, file_ofs);
+
if (file_read (file, &phdr, sizeof phdr) != sizeof phdr)
LOAD_ERROR (("error reading program header"));
file_ofs += sizeof phdr;
return false;
}
+ /* p_offset must point within file. */
+ if (phdr->p_offset < 0 || phdr->p_offset > file_length (file))
+ {
+ printf ("bad p_offset %"PE32Ox, phdr->p_offset);
+ return false;
+ }
+
/* [ELF1] 2-3 says that p_memsz must be at least as big as
p_filesz. */
if (phdr->p_memsz < phdr->p_filesz)