diff options
author | H.J. Lu <hjl@lucon.org> | 2005-05-18 13:41:59 +0000 |
---|---|---|
committer | H.J. Lu <hjl@lucon.org> | 2005-05-18 13:41:59 +0000 |
commit | c193a98dfc4b6129e1a812fb868e46beb1451834 (patch) | |
tree | b57579ff37fc298924b9c60094e489a026e09956 /bfd/elf.c | |
parent | 56264b3dc16bdd8142c02ffc0da68cc19a532f5e (diff) | |
download | gdb-c193a98dfc4b6129e1a812fb868e46beb1451834.tar.gz |
2005-05-18 H.J. Lu <hongjiu.lu@intel.com>
* elf.c (group_signature): Check if the symbol table section is
correct.
Diffstat (limited to 'bfd/elf.c')
-rw-r--r-- | bfd/elf.c | 22 |
1 files changed, 5 insertions, 17 deletions
diff --git a/bfd/elf.c b/bfd/elf.c index 3ef04d4e2cc..2f610ba7ea8 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -451,24 +451,12 @@ group_signature (bfd *abfd, Elf_Internal_Shdr *ghdr) unsigned char esym[sizeof (Elf64_External_Sym)]; Elf_External_Sym_Shndx eshndx; Elf_Internal_Sym isym; - unsigned int i; - - if (ghdr == NULL) - return NULL; - - /* If this section is linked to by other sections then it is a symbol or - string section which is masquerading as a group. This is a bad thing, - and if we carry on to the call to bfd_section_from_shdr below we will - enter an infinite loop. So check now and break out if we detect this - case. See: - http://sources.redhat.com/ml/binutils/2005-05/msg00421.html - for a report of a case that tirggers this code. */ - for (i = elf_numsections (abfd); i--;) - if (elf_elfsections (abfd) [elf_elfsections (abfd) [i]->sh_link] == ghdr) - return NULL; - /* Next we need to ensure the symbol table is available. */ - if (! bfd_section_from_shdr (abfd, ghdr->sh_link)) + /* First we need to ensure the symbol table is available. Make sure + that it is a symbol table section. */ + hdr = elf_elfsections (abfd) [ghdr->sh_link]; + if (hdr->sh_type != SHT_SYMTAB + || ! bfd_section_from_shdr (abfd, ghdr->sh_link)) return NULL; /* Go read the symbol. */ |