asan: NULL dereference in som_set_reloc_info
authorAlan Modra <amodra@gmail.com>
Sat, 13 Aug 2022 04:35:24 +0000 (14:05 +0930)
committerAlan Modra <amodra@gmail.com>
Sat, 13 Aug 2022 04:41:27 +0000 (14:11 +0930)
* som.c (som_set_reloc_info): Ignore non-existent previous
fixup references.

bfd/som.c

index d33ad67561a0c9c62ea22630904a0ad71a3b84fe..c22f13b5a4c7342446c971f121c5916df29afc5e 100644 (file)
--- 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;