From 13792e9d85c5cdd3a37f675ce4006ad546ad91f1 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Wed, 18 May 2005 13:41:59 +0000 Subject: [PATCH] 2005-05-18 H.J. Lu * elf.c (group_signature): Check if the symbol table section is correct. --- bfd/ChangeLog | 5 +++++ bfd/elf.c | 22 +++++----------------- 2 files changed, 10 insertions(+), 17 deletions(-) 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. */ -- 2.30.2