mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-26 13:56:22 +08:00
Remove an abort in the bfd library and add a check for an integer overflow when mapping sections to segments.
PR 23932 * elf.c (IS_CONTAINED_BY_LMA): Add a check for a negative section size. (rewrite_elf_program_header): If no sections are mapped into a segment return an error.
This commit is contained in:
@ -1,3 +1,11 @@
|
|||||||
|
2018-11-30 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
|
PR 23932
|
||||||
|
* elf.c (IS_CONTAINED_BY_LMA): Add a check for a negative section
|
||||||
|
size.
|
||||||
|
(rewrite_elf_program_header): If no sections are mapped into a
|
||||||
|
segment return an error.
|
||||||
|
|
||||||
2018-11-30 Alan Modra <amodra@gmail.com>
|
2018-11-30 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
PR 23937
|
PR 23937
|
||||||
|
11
bfd/elf.c
11
bfd/elf.c
@ -6644,6 +6644,7 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
|
|||||||
the given segment. LMA addresses are compared. */
|
the given segment. LMA addresses are compared. */
|
||||||
#define IS_CONTAINED_BY_LMA(section, segment, base) \
|
#define IS_CONTAINED_BY_LMA(section, segment, base) \
|
||||||
(section->lma >= base \
|
(section->lma >= base \
|
||||||
|
&& (section->lma + SECTION_SIZE (section, segment) >= section->lma) \
|
||||||
&& (section->lma + SECTION_SIZE (section, segment) \
|
&& (section->lma + SECTION_SIZE (section, segment) \
|
||||||
<= SEGMENT_END (segment, base)))
|
<= SEGMENT_END (segment, base)))
|
||||||
|
|
||||||
@ -7167,7 +7168,15 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
|
|||||||
suggested_lma = output_section;
|
suggested_lma = output_section;
|
||||||
}
|
}
|
||||||
|
|
||||||
BFD_ASSERT (map->count > 0);
|
/* PR 23932. A corrupt input file may contain sections that cannot
|
||||||
|
be assigned to any segment - because for example they have a
|
||||||
|
negative size - or segments that do not contain any sections. */
|
||||||
|
if (map->count == 0)
|
||||||
|
{
|
||||||
|
bfd_set_error (bfd_error_bad_value);
|
||||||
|
free (sections);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/* Add the current segment to the list of built segments. */
|
/* Add the current segment to the list of built segments. */
|
||||||
*pointer_to_map = map;
|
*pointer_to_map = map;
|
||||||
|
Reference in New Issue
Block a user