From: H.J. Lu Date: Wed, 18 May 2005 13:41:59 +0000 (+0000) Subject: 2005-05-18 H.J. Lu X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=13792e9d85c5cdd3a37f675ce4006ad546ad91f1;p=binutils-gdb.git 2005-05-18 H.J. Lu * elf.c (group_signature): Check if the symbol table section is correct. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 76f3f264e7c..9452a3561fb 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2005-05-18 H.J. Lu + + * elf.c (group_signature): Undo the last change. Check if the + symbol table section is correct. + 2005-05-17 Zack Weinberg * elf32-arm.c: Wherever possible, use official reloc names 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. */