aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2025-02-18 19:32:42 +1030
committerAlan Modra <amodra@gmail.com>2025-02-18 19:36:18 +1030
commit28588dc52c9262b16e8d18e0fab3829797d2c595 (patch)
tree9847b0c563efc05bd574d4c00f09335eb3f1949b
parent2b020f53230f57f4f44029aceee95ca484485235 (diff)
downloadbinutils-28588dc52c9262b16e8d18e0fab3829797d2c595.zip
binutils-28588dc52c9262b16e8d18e0fab3829797d2c595.tar.gz
binutils-28588dc52c9262b16e8d18e0fab3829797d2c595.tar.bz2
PR32703, Null pointer dereference in bfd/linker.c
NULL is a possible return from bfd_section_already_linked_table_lookup if out-of-memory. PR 32703 * linker.c (_bfd_generic_section_already_linked): Catch bfd_section_already_linked_table_lookup failure. * coffgen.c (_bfd_coff_section_already_linked): Likewise.
-rw-r--r--bfd/coffgen.c7
-rw-r--r--bfd/linker.c7
2 files changed, 12 insertions, 2 deletions
diff --git a/bfd/coffgen.c b/bfd/coffgen.c
index 5dbd666..f87e54f 100644
--- a/bfd/coffgen.c
+++ b/bfd/coffgen.c
@@ -2767,6 +2767,8 @@ _bfd_coff_section_already_linked (bfd *abfd,
}
already_linked_list = bfd_section_already_linked_table_lookup (key);
+ if (!already_linked_list)
+ goto bad;
for (l = already_linked_list->entry; l != NULL; l = l->next)
{
@@ -2794,7 +2796,10 @@ _bfd_coff_section_already_linked (bfd *abfd,
/* This is the first section with this name. Record it. */
if (!bfd_section_already_linked_table_insert (already_linked_list, sec))
- info->callbacks->fatal (_("%P: already_linked_table: %E\n"));
+ {
+ bad:
+ info->callbacks->fatal (_("%P: already_linked_table: %E\n"));
+ }
return false;
}
diff --git a/bfd/linker.c b/bfd/linker.c
index 3466391..2a4b8f0 100644
--- a/bfd/linker.c
+++ b/bfd/linker.c
@@ -3025,6 +3025,8 @@ _bfd_generic_section_already_linked (bfd *abfd ATTRIBUTE_UNUSED,
name = bfd_section_name (sec);
already_linked_list = bfd_section_already_linked_table_lookup (name);
+ if (!already_linked_list)
+ goto bad;
l = already_linked_list->entry;
if (l != NULL)
@@ -3036,7 +3038,10 @@ _bfd_generic_section_already_linked (bfd *abfd ATTRIBUTE_UNUSED,
/* This is the first section with this name. Record it. */
if (!bfd_section_already_linked_table_insert (already_linked_list, sec))
- info->callbacks->fatal (_("%P: already_linked_table: %E\n"));
+ {
+ bad:
+ info->callbacks->fatal (_("%P: already_linked_table: %E\n"));
+ }
return false;
}