aboutsummaryrefslogtreecommitdiff
path: root/bfd/som.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2022-08-13 14:05:24 +0930
committerAlan Modra <amodra@gmail.com>2022-08-13 14:11:27 +0930
commit8c68d88cc44ec476125e30835f79865e8eb32358 (patch)
treecdc81622e36141fc7384a3bb395a1c739a4fc5aa /bfd/som.c
parentcc44342012efbc20421fa91abd1f0c3000a2241a (diff)
downloadgdb-8c68d88cc44ec476125e30835f79865e8eb32358.zip
gdb-8c68d88cc44ec476125e30835f79865e8eb32358.tar.gz
gdb-8c68d88cc44ec476125e30835f79865e8eb32358.tar.bz2
asan: NULL dereference in som_set_reloc_info
* som.c (som_set_reloc_info): Ignore non-existent previous fixup references.
Diffstat (limited to 'bfd/som.c')
-rw-r--r--bfd/som.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/bfd/som.c b/bfd/som.c
index d33ad67..c22f13b 100644
--- a/bfd/som.c
+++ b/bfd/som.c
@@ -4978,6 +4978,11 @@ som_set_reloc_info (unsigned char *fixup,
/* Handle a request for a previous fixup. */
if (*fp->format == 'P')
{
+ if (!reloc_queue[fp->D].reloc)
+ /* The back-reference doesn't exist. This is a broken
+ object file, likely fuzzed. Just ignore the fixup. */
+ continue;
+
/* Get pointer to the beginning of the prev fixup, move
the repeated fixup to the head of the queue. */
fixup = reloc_queue[fp->D].reloc;