aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2021-02-11 16:56:22 +1030
committerAlan Modra <amodra@gmail.com>2021-02-11 19:42:15 +1030
commit31c711a2b302cf27f2cb4d5dd2c495407b384b94 (patch)
tree77088bdbd9186f338321b4cd422be00e1169ae7e
parent1cfcf3004e1830f8fe9112cfcd15285508d2c2b7 (diff)
downloadgdb-31c711a2b302cf27f2cb4d5dd2c495407b384b94.zip
gdb-31c711a2b302cf27f2cb4d5dd2c495407b384b94.tar.gz
gdb-31c711a2b302cf27f2cb4d5dd2c495407b384b94.tar.bz2
PR27294, avr OOM
PR 27294 * elf32-avr.c (avr_elf32_load_records_from_section): Use bfd_malloc_and_get_section. Use bfd_byte* vars and remove then unnecessary casts.
-rw-r--r--bfd/ChangeLog7
-rw-r--r--bfd/elf32-avr.c16
2 files changed, 15 insertions, 8 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 41da87b..8fb42f9 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,12 @@
2021-02-11 Alan Modra <amodra@gmail.com>
+ PR 27294
+ * elf32-avr.c (avr_elf32_load_records_from_section): Use
+ bfd_malloc_and_get_section. Use bfd_byte* vars and remove then
+ unnecessary casts.
+
+2021-02-11 Alan Modra <amodra@gmail.com>
+
PR 27291
* section.c (bfd_get_section_contents): Avoid possible overflow
when range checking offset and count.
diff --git a/bfd/elf32-avr.c b/bfd/elf32-avr.c
index 3859796..ed38ff8 100644
--- a/bfd/elf32-avr.c
+++ b/bfd/elf32-avr.c
@@ -4001,7 +4001,7 @@ avr_find_section_for_address (bfd *abfd ATTRIBUTE_UNUSED,
static struct avr_property_record_list *
avr_elf32_load_records_from_section (bfd *abfd, asection *sec)
{
- char *contents = NULL, *ptr;
+ bfd_byte *contents, *ptr;
bfd_size_type size, mem_size;
bfd_byte version, flags;
uint16_t record_count, i;
@@ -4011,9 +4011,8 @@ avr_elf32_load_records_from_section (bfd *abfd, asection *sec)
fs_data.section = NULL;
- size = bfd_section_size (sec);
- contents = bfd_malloc (size);
- bfd_get_section_contents (abfd, sec, contents, 0, size);
+ if (!bfd_malloc_and_get_section (abfd, sec, &contents))
+ goto load_failed;
ptr = contents;
/* Load the relocations for the '.avr.prop' section if there are any, and
@@ -4032,15 +4031,16 @@ avr_elf32_load_records_from_section (bfd *abfd, asection *sec)
*/
/* Check we have at least got a headers worth of bytes. */
+ size = bfd_section_size (sec);
if (size < AVR_PROPERTY_SECTION_HEADER_SIZE)
goto load_failed;
- version = *((bfd_byte *) ptr);
+ version = *ptr;
ptr++;
- flags = *((bfd_byte *) ptr);
+ flags = *ptr;
ptr++;
record_count = bfd_get_16 (abfd, ptr);
- ptr+=2;
+ ptr += 2;
BFD_ASSERT (ptr - contents == AVR_PROPERTY_SECTION_HEADER_SIZE);
/* Now allocate space for the list structure, and all of the list
@@ -4135,7 +4135,7 @@ avr_elf32_load_records_from_section (bfd *abfd, asection *sec)
= address - bfd_section_vma (fs_data.section);
}
- r_list->records [i].type = *((bfd_byte *) ptr);
+ r_list->records [i].type = *ptr;
ptr += 1;
size -= 1;