From f1c4160786e08cf0ec4c89c5c0466deab0855ab8 Mon Sep 17 00:00:00 2001 From: Andreas Krebbel Date: Tue, 27 Feb 2024 15:24:06 +0100 Subject: [PATCH] s390: Add r_offset check to the weak undef change Since we are accessing up to 2 bytes before the relocation target we should better make sure there are actually 2 bytes before it. ChangeLog: * bfd/elf64-s390.c (elf_s390_relocate_section): Make sure rel->r_offset is large enough. --- bfd/elf64-s390.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c index 74ac0180bf8..beaf3e90743 100644 --- a/bfd/elf64-s390.c +++ b/bfd/elf64-s390.c @@ -2486,7 +2486,8 @@ elf_s390_relocate_section (bfd *output_bfd, && !h->root.linker_def && (bfd_link_executable (info) || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) - && r_type == R_390_PC32DBL) + && r_type == R_390_PC32DBL + && rel->r_offset >= 2) { void *insn_start = contents + rel->r_offset - 2; uint16_t op = bfd_get_16 (input_bfd, insn_start) & 0xff0f;