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.
This commit is contained in:
parent
f321b03772
commit
1fe9dc4519
|
@ -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>
|
2014-11-04 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
PR binutils/17512
|
PR binutils/17512
|
||||||
|
|
|
@ -455,6 +455,8 @@ _bfd_elf_parse_attributes (bfd *abfd, Elf_Internal_Shdr * hdr)
|
||||||
|
|
||||||
section_len = bfd_get_32 (abfd, p);
|
section_len = bfd_get_32 (abfd, p);
|
||||||
p += 4;
|
p += 4;
|
||||||
|
if (section_len == 0)
|
||||||
|
break;
|
||||||
if (section_len > len)
|
if (section_len > len)
|
||||||
section_len = len;
|
section_len = len;
|
||||||
len -= section_len;
|
len -= section_len;
|
||||||
|
@ -487,6 +489,8 @@ _bfd_elf_parse_attributes (bfd *abfd, Elf_Internal_Shdr * hdr)
|
||||||
p += n;
|
p += n;
|
||||||
subsection_len = bfd_get_32 (abfd, p);
|
subsection_len = bfd_get_32 (abfd, p);
|
||||||
p += 4;
|
p += 4;
|
||||||
|
if (subsection_len == 0)
|
||||||
|
break;
|
||||||
if (subsection_len > section_len)
|
if (subsection_len > section_len)
|
||||||
subsection_len = section_len;
|
subsection_len = section_len;
|
||||||
section_len -= subsection_len;
|
section_len -= subsection_len;
|
||||||
|
|
Loading…
Reference in New Issue