Lines Matching refs:shdr
285 static bool elf_is_shdr_sane(const struct elf_shdr *shdr, size_t buf_len) in elf_is_shdr_sane() argument
290 if (shdr->sh_type == SHT_NULL) in elf_is_shdr_sane()
294 switch (shdr->sh_type) { in elf_is_shdr_sane()
296 size_ok = shdr->sh_entsize == sizeof(Elf_Sym); in elf_is_shdr_sane()
299 size_ok = shdr->sh_entsize == sizeof(Elf_Rela); in elf_is_shdr_sane()
302 size_ok = shdr->sh_entsize == sizeof(Elf_Dyn); in elf_is_shdr_sane()
305 size_ok = shdr->sh_entsize == sizeof(Elf_Rel); in elf_is_shdr_sane()
325 } else if (shdr->sh_addr + shdr->sh_size < shdr->sh_addr) { in elf_is_shdr_sane()
330 if (shdr->sh_type != SHT_NOBITS) { in elf_is_shdr_sane()
331 if (shdr->sh_offset + shdr->sh_size < shdr->sh_offset) { in elf_is_shdr_sane()
334 } else if (shdr->sh_offset + shdr->sh_size > buf_len) { in elf_is_shdr_sane()
346 struct elf_shdr *shdr = &elf_info->sechdrs[idx]; in elf_read_shdr() local
354 shdr->sh_name = elf32_to_cpu(ehdr, buf_shdr->sh_name); in elf_read_shdr()
355 shdr->sh_type = elf32_to_cpu(ehdr, buf_shdr->sh_type); in elf_read_shdr()
356 shdr->sh_addr = elf_addr_to_cpu(ehdr, buf_shdr->sh_addr); in elf_read_shdr()
357 shdr->sh_offset = elf_addr_to_cpu(ehdr, buf_shdr->sh_offset); in elf_read_shdr()
358 shdr->sh_link = elf32_to_cpu(ehdr, buf_shdr->sh_link); in elf_read_shdr()
359 shdr->sh_info = elf32_to_cpu(ehdr, buf_shdr->sh_info); in elf_read_shdr()
365 shdr->sh_flags = elf_addr_to_cpu(ehdr, buf_shdr->sh_flags); in elf_read_shdr()
366 shdr->sh_size = elf_addr_to_cpu(ehdr, buf_shdr->sh_size); in elf_read_shdr()
367 shdr->sh_addralign = elf_addr_to_cpu(ehdr, buf_shdr->sh_addralign); in elf_read_shdr()
368 shdr->sh_entsize = elf_addr_to_cpu(ehdr, buf_shdr->sh_entsize); in elf_read_shdr()
370 return elf_is_shdr_sane(shdr, len) ? 0 : -ENOEXEC; in elf_read_shdr()