aboutsummaryrefslogtreecommitdiff
path: root/bfd/elf64-mips.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2021-08-05 18:35:11 +0930
committerAlan Modra <amodra@gmail.com>2021-08-05 20:47:09 +0930
commit6ecfe4abfd14e9c04075435210ca383a1a0191ac (patch)
treed0c213f1a7fd59e7bb36e72d521808e915db5ec5 /bfd/elf64-mips.c
parent4939c49d213c760406f2ad0178ddb3461b618eb9 (diff)
downloadbinutils-6ecfe4abfd14e9c04075435210ca383a1a0191ac.zip
binutils-6ecfe4abfd14e9c04075435210ca383a1a0191ac.tar.gz
binutils-6ecfe4abfd14e9c04075435210ca383a1a0191ac.tar.bz2
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.c11
1 files changed, 2 insertions, 9 deletions
diff --git a/bfd/elf64-mips.c b/bfd/elf64-mips.c
index b94adf1..9ad884f 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;
}