From 4d16d5754ec1e71d5e0b590a5b0ecdda95892f14 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Tue, 14 Jun 2011 12:57:18 +0000 Subject: [PATCH] PR ld/12887 * elf-eh-frame.c (_bfd_elf_parse_eh_frame): Check sec_info_type before doing anything. (_bfd_elf_discard_section_eh_frame): Likewise. --- bfd/ChangeLog | 7 +++++++ bfd/elf-eh-frame.c | 8 ++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 0c3dfdf88c4..0fd8e4f0b29 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2011-06-14 Alan Modra + + PR ld/12887 + * elf-eh-frame.c (_bfd_elf_parse_eh_frame): Check sec_info_type + before doing anything. + (_bfd_elf_discard_section_eh_frame): Likewise. + 2011-06-14 Alan Modra * Makefile.am: Formatting. diff --git a/bfd/elf-eh-frame.c b/bfd/elf-eh-frame.c index 0a221381474..21041a5b408 100644 --- a/bfd/elf-eh-frame.c +++ b/bfd/elf-eh-frame.c @@ -1,5 +1,5 @@ /* .eh_frame section optimization. - Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 + Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. Written by Jakub Jelinek . @@ -490,7 +490,8 @@ _bfd_elf_parse_eh_frame (bfd *abfd, struct bfd_link_info *info, if (hdr_info->parsed_eh_frames) return; - if (sec->size == 0) + if (sec->size == 0 + || sec->sec_info_type != ELF_INFO_TYPE_NONE) { /* This file does not contain .eh_frame information. */ return; @@ -1133,6 +1134,9 @@ _bfd_elf_discard_section_eh_frame struct eh_frame_hdr_info *hdr_info; unsigned int ptr_size, offset; + if (sec->sec_info_type != ELF_INFO_TYPE_EH_FRAME) + return FALSE; + sec_info = (struct eh_frame_sec_info *) elf_section_data (sec)->sec_info; if (sec_info == NULL) return FALSE; -- 2.30.2