diff options
author | Alan Modra <amodra@gmail.com> | 2021-08-05 18:35:11 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2021-08-05 20:47:09 +0930 |
commit | 6ecfe4abfd14e9c04075435210ca383a1a0191ac (patch) | |
tree | d0c213f1a7fd59e7bb36e72d521808e915db5ec5 /bfd/elf64-mips.c | |
parent | 4939c49d213c760406f2ad0178ddb3461b618eb9 (diff) | |
download | binutils-gdb-6ecfe4abfd14e9c04075435210ca383a1a0191ac.tar.gz |
PR28166, _bfd_elf_mips_get_relocated_section_contents
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.
Diffstat (limited to 'bfd/elf64-mips.c')
-rw-r--r-- | bfd/elf64-mips.c | 11 |
1 files changed, 2 insertions, 9 deletions
diff --git a/bfd/elf64-mips.c b/bfd/elf64-mips.c index b94adf12953..9ad884fafb6 100644 --- a/bfd/elf64-mips.c +++ b/bfd/elf64-mips.c @@ -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; } |