mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2025-02-02 06:54:54 +00:00
PR ld/2607
* elfcode.h (valid_section_index_p): New function: Checks for a valid section index. Allows indicies in the range SHN_LOPROC to SHN_HIOS. (elf_object_p): Use valid_section_index_p.
This commit is contained in:
parent
53baae4870
commit
5e1b4a6d17
@ -1,3 +1,11 @@
|
||||
2006-05-10 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
PR ld/2607
|
||||
* elfcode.h (valid_section_index_p): New function: Checks for a
|
||||
valid section index. Allows indicies in the range SHN_LOPROC to
|
||||
SHN_HIOS.
|
||||
(elf_object_p): Use valid_section_index_p.
|
||||
|
||||
2006-05-11 Pedro Alves <pedro_alves@portugalmail.pt>
|
||||
|
||||
* coff-arm.c (ARM_26D, ARM_32, ARM_RVA_32, ARM_SECTION,
|
||||
|
@ -459,6 +459,25 @@ elf_file_p (Elf_External_Ehdr *x_ehdrp)
|
||||
&& (x_ehdrp->e_ident[EI_MAG3] == ELFMAG3));
|
||||
}
|
||||
|
||||
/* Determines if a given section index is valid. */
|
||||
|
||||
static inline bfd_boolean
|
||||
valid_section_index_p (unsigned index, unsigned num_sections)
|
||||
{
|
||||
/* Note: We allow SHN_UNDEF as a valid section index. */
|
||||
if (index < SHN_LORESERVE || index > SHN_HIRESERVE)
|
||||
return index < num_sections;
|
||||
|
||||
/* We disallow the use of reserved indcies, except for those
|
||||
with OS or Application specific meaning. The test make use
|
||||
of the knowledge that:
|
||||
SHN_LORESERVE == SHN_LOPROC
|
||||
and
|
||||
SHN_HIPROC == SHN_LOOS - 1 */
|
||||
/* XXX - Should we allow SHN_XINDEX as a valid index here ? */
|
||||
return (index >= SHN_LOPROC && index <= SHN_HIOS);
|
||||
}
|
||||
|
||||
/* Check to see if the file associated with ABFD matches the target vector
|
||||
that ABFD points to.
|
||||
|
||||
@ -712,17 +731,13 @@ elf_object_p (bfd *abfd)
|
||||
elf_swap_shdr_in (abfd, &x_shdr, i_shdrp + shindex);
|
||||
|
||||
/* Sanity check sh_link and sh_info. */
|
||||
if (i_shdrp[shindex].sh_link >= num_sec
|
||||
|| (i_shdrp[shindex].sh_link >= SHN_LORESERVE
|
||||
&& i_shdrp[shindex].sh_link <= SHN_HIRESERVE))
|
||||
if (! valid_section_index_p (i_shdrp[shindex].sh_link, num_sec))
|
||||
goto got_wrong_format_error;
|
||||
|
||||
if (((i_shdrp[shindex].sh_flags & SHF_INFO_LINK)
|
||||
|| i_shdrp[shindex].sh_type == SHT_RELA
|
||||
|| i_shdrp[shindex].sh_type == SHT_REL)
|
||||
&& (i_shdrp[shindex].sh_info >= num_sec
|
||||
|| (i_shdrp[shindex].sh_info >= SHN_LORESERVE
|
||||
&& i_shdrp[shindex].sh_info <= SHN_HIRESERVE)))
|
||||
&& ! valid_section_index_p (i_shdrp[shindex].sh_info, num_sec))
|
||||
goto got_wrong_format_error;
|
||||
|
||||
/* If the section is loaded, but not page aligned, clear
|
||||
@ -740,9 +755,7 @@ elf_object_p (bfd *abfd)
|
||||
/* A further sanity check. */
|
||||
if (i_ehdrp->e_shnum != 0)
|
||||
{
|
||||
if (i_ehdrp->e_shstrndx >= elf_numsections (abfd)
|
||||
|| (i_ehdrp->e_shstrndx >= SHN_LORESERVE
|
||||
&& i_ehdrp->e_shstrndx <= SHN_HIRESERVE))
|
||||
if (! valid_section_index_p (i_ehdrp->e_shstrndx, elf_numsections (abfd)))
|
||||
{
|
||||
/* PR 2257:
|
||||
We used to just goto got_wrong_format_error here
|
||||
|
Loading…
x
Reference in New Issue
Block a user