Don't exceed reloc array bounds

* elf64-ppc.c (ppc64_elf_relocate_section): Don't access rel[1]
	without first checking array bounds.
	* elf32-ppc.c (ppc_elf_relocate_section): Likewise.
This commit is contained in:
Alan Modra 2018-03-17 17:49:12 +10:30
parent dca9fbc845
commit 675e28092f
3 changed files with 14 additions and 4 deletions

View File

@ -1,3 +1,9 @@
2018-03-21 Alan Modra <amodra@gmail.com>
* elf64-ppc.c (ppc64_elf_relocate_section): Don't access rel[1]
without first checking array bounds.
* elf32-ppc.c (ppc_elf_relocate_section): Likewise.
2018-03-20 H.J. Lu <hongjiu.lu@intel.com>
PR ld/22983

View File

@ -8000,7 +8000,8 @@ ppc_elf_relocate_section (bfd *output_bfd,
break;
case R_PPC_TLSGD:
if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0)
if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0
&& rel + 1 < relend)
{
unsigned int insn2;
bfd_vma offset = rel->r_offset;
@ -8027,7 +8028,8 @@ ppc_elf_relocate_section (bfd *output_bfd,
break;
case R_PPC_TLSLD:
if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0)
if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0
&& rel + 1 < relend)
{
unsigned int insn2;

View File

@ -13897,7 +13897,8 @@ ppc64_elf_relocate_section (bfd *output_bfd,
break;
case R_PPC64_TLSGD:
if (tls_mask != 0 && (tls_mask & TLS_GD) == 0)
if (tls_mask != 0 && (tls_mask & TLS_GD) == 0
&& rel + 1 < relend)
{
unsigned int insn2;
bfd_vma offset = rel->r_offset;
@ -13931,7 +13932,8 @@ ppc64_elf_relocate_section (bfd *output_bfd,
break;
case R_PPC64_TLSLD:
if (tls_mask != 0 && (tls_mask & TLS_LD) == 0)
if (tls_mask != 0 && (tls_mask & TLS_LD) == 0
&& rel + 1 < relend)
{
unsigned int insn2;
bfd_vma offset = rel->r_offset;