From 5ef11c0214f8a01a6bc0a5dd9c51383012c372c5 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Thu, 21 May 2009 13:49:11 +0000 Subject: [PATCH] * elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Don't segfault on out of range .opd symbols. --- bfd/ChangeLog | 5 +++++ bfd/elf64-ppc.c | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 3b0e97b96ae..50ef873301b 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2009-05-21 Alan Modra + + * elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Don't segfault on + out of range .opd symbols. + 2009-05-21 Dave Korn * coffgen.c (coff_print_symbol): Use bfd_fprintf_vma, not diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index ce82e160152..ae3c3b9f3c9 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -3033,6 +3033,10 @@ ppc64_elf_get_synthetic_symtab (bfd *abfd, { bfd_vma ent; + /* Ignore bogus symbols. */ + if (syms[i]->value > opd->size - 8) + continue; + ent = bfd_get_64 (abfd, contents + syms[i]->value); if (!sym_exists_at (syms, opdsymend, symcount, -1, ent)) { @@ -3126,6 +3130,9 @@ ppc64_elf_get_synthetic_symtab (bfd *abfd, { bfd_vma ent; + if (syms[i]->value > opd->size - 8) + continue; + ent = bfd_get_64 (abfd, contents + syms[i]->value); if (!sym_exists_at (syms, opdsymend, symcount, -1, ent)) { -- 2.30.2