aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWill Newton <will.newton@linaro.org>2014-11-05 15:24:30 +0000
committerWill Newton <will.newton@linaro.org>2014-11-06 13:01:18 +0000
commit1fe9dc4519a86b856da7de0837366bbece82f2de (patch)
tree5eb97c8baeeb6f2cc967070b1952d8b545abe9d6
parentf321b0377203a27f3ee54bf8e0d613e8404e9c6b (diff)
downloadgdb-1fe9dc4519a86b856da7de0837366bbece82f2de.zip
gdb-1fe9dc4519a86b856da7de0837366bbece82f2de.tar.gz
gdb-1fe9dc4519a86b856da7de0837366bbece82f2de.tar.bz2
bfd/elf-attrs.c: Fix possible infinite loop parsing attributes
Handle the case of a zero length section or sub-section in _bfd_elf_parse_attributes and in doing so prevent an infinite loop in the parser. bfd/ChangeLog: 2014-11-06 Will Newton <will.newton@linaro.org> * elf-attrs.c (_bfd_elf_parse_attributes): Handle zero length sections and sub-sections.
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elf-attrs.c4
2 files changed, 9 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 16724b3..7a57b12 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2014-11-06 Will Newton <will.newton@linaro.org>
+
+ * elf-attrs.c (_bfd_elf_parse_attributes): Handle zero
+ length sections and sub-sections.
+
2014-11-04 Nick Clifton <nickc@redhat.com>
PR binutils/17512
diff --git a/bfd/elf-attrs.c b/bfd/elf-attrs.c
index cd0cbca..6bc2944 100644
--- a/bfd/elf-attrs.c
+++ b/bfd/elf-attrs.c
@@ -455,6 +455,8 @@ _bfd_elf_parse_attributes (bfd *abfd, Elf_Internal_Shdr * hdr)
section_len = bfd_get_32 (abfd, p);
p += 4;
+ if (section_len == 0)
+ break;
if (section_len > len)
section_len = len;
len -= section_len;
@@ -487,6 +489,8 @@ _bfd_elf_parse_attributes (bfd *abfd, Elf_Internal_Shdr * hdr)
p += n;
subsection_len = bfd_get_32 (abfd, p);
p += 4;
+ if (subsection_len == 0)
+ break;
if (subsection_len > section_len)
subsection_len = section_len;
section_len -= subsection_len;