PR28166, _bfd_elf_mips_get_relocated_section_contents
authorAlan Modra <amodra@gmail.com>
Thu, 5 Aug 2021 09:05:11 +0000 (18:35 +0930)
committerAlan Modra <amodra@gmail.com>
Thu, 5 Aug 2021 11:17:09 +0000 (20:47 +0930)
Some of the code paths unpacking mips relocs left arelent->sym_ptr_ptr
uninitialised.

PR 28166
* elf64-mips.c (mips_elf64_slurp_one_reloc_table): Don't leave
sym_ptr_ptr uninitialised.

bfd/elf64-mips.c

index b94adf129534597964410e5b2f2b90df993acfb6..9ad884fafb68dd20def1499909240e33be95b993 100644 (file)
@@ -4073,6 +4073,7 @@ mips_elf64_slurp_one_reloc_table (bfd *abfd, asection *asect,
            }
 
          /* Some types require symbols, whereas some do not.  */
+         relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
          switch (type)
            {
            case R_MIPS_NONE:
@@ -4080,14 +4081,13 @@ mips_elf64_slurp_one_reloc_table (bfd *abfd, asection *asect,
            case R_MIPS_INSERT_A:
            case R_MIPS_INSERT_B:
            case R_MIPS_DELETE:
-             relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
              break;
 
            default:
              if (! used_sym)
                {
                  if (rela.r_sym == STN_UNDEF)
-                   relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
+                   ;
                  else if (rela.r_sym > symcount)
                    {
                      _bfd_error_handler
@@ -4096,8 +4096,6 @@ mips_elf64_slurp_one_reloc_table (bfd *abfd, asection *asect,
                           " has invalid symbol index %ld"),
                         abfd, asect, (uint64_t) i, rela.r_sym);
                      bfd_set_error (bfd_error_bad_value);
-                     relent->sym_ptr_ptr
-                       = bfd_abs_section_ptr->symbol_ptr_ptr;
                    }
                  else
                    {
@@ -4118,8 +4116,6 @@ mips_elf64_slurp_one_reloc_table (bfd *abfd, asection *asect,
                  switch (rela.r_ssym)
                    {
                    case RSS_UNDEF:
-                     relent->sym_ptr_ptr =
-                       bfd_abs_section_ptr->symbol_ptr_ptr;
                      break;
 
                    case RSS_GP:
@@ -4137,9 +4133,6 @@ mips_elf64_slurp_one_reloc_table (bfd *abfd, asection *asect,
 
                  used_ssym = true;
                }
-             else
-               relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
-
              break;
            }