From 5d2834cc7e943014cff0cef6a2a25972eb85d84a Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Wed, 8 Jun 2022 18:34:15 +0930 Subject: [PATCH] bfin reloc offset checks These all ought to use bfd_reloc_offset_in_range. In particular, replace the check using howto->size + 1u. * elf32-bfin.c (bfin_pcrel24_reloc): Use bfd_reloc_offset_in_range. (bfin_imm16_reloc, bfin_byte4_reloc, bfin_bfd_reloc), (bfin_final_link_relocate): Likewise. --- bfd/elf32-bfin.c | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/bfd/elf32-bfin.c b/bfd/elf32-bfin.c index b41c212c2ba..babc57e3955 100644 --- a/bfd/elf32-bfin.c +++ b/bfd/elf32-bfin.c @@ -59,9 +59,8 @@ bfin_pcrel24_reloc (bfd *abfd, reloc_howto_type *howto = reloc_entry->howto; asection *output_section; bool relocatable = (output_bfd != NULL); - bfd_size_type limit = bfd_get_section_limit_octets (abfd, input_section); - if (addr - 2 > limit || limit - (addr - 2) < 2) + if (!bfd_reloc_offset_in_range (howto, abfd, input_section, addr - 2)) return bfd_reloc_outofrange; if (bfd_is_und_section (symbol->section) @@ -157,10 +156,9 @@ bfin_imm16_reloc (bfd *abfd, reloc_howto_type *howto = reloc_entry->howto; asection *output_section; bool relocatable = (output_bfd != NULL); - bfd_size_type limit = bfd_get_section_limit_octets (abfd, input_section); /* Is the address of the relocation really within the section? */ - if (reloc_addr > limit || limit - reloc_addr < 2) + if (!bfd_reloc_offset_in_range (howto, abfd, input_section, reloc_addr)) return bfd_reloc_outofrange; if (bfd_is_und_section (symbol->section) @@ -229,10 +227,10 @@ bfin_byte4_reloc (bfd *abfd, bfd_vma output_base = 0; asection *output_section; bool relocatable = (output_bfd != NULL); - bfd_size_type limit = bfd_get_section_limit_octets (abfd, input_section); /* Is the address of the relocation really within the section? */ - if (addr > limit || limit - addr < 4) + if (!bfd_reloc_offset_in_range (reloc_entry->howto, abfd, input_section, + addr)) return bfd_reloc_outofrange; if (bfd_is_und_section (symbol->section) @@ -297,10 +295,9 @@ bfin_bfd_reloc (bfd *abfd, reloc_howto_type *howto = reloc_entry->howto; asection *output_section; bool relocatable = (output_bfd != NULL); - bfd_size_type limit = bfd_get_section_limit_octets (abfd, input_section); /* Is the address of the relocation really within the section? */ - if (addr > limit || limit - addr < howto->size + 1u) + if (!bfd_reloc_offset_in_range (howto, abfd, input_section, addr)) return bfd_reloc_outofrange; if (bfd_is_und_section (symbol->section) @@ -1320,11 +1317,10 @@ bfin_final_link_relocate (Elf_Internal_Rela *rel, reloc_howto_type *howto, { bfd_reloc_status_type r = bfd_reloc_ok; bfd_vma x; - bfd_size_type limit = bfd_get_section_limit_octets (input_bfd, - input_section); - if (address - 2 > limit || limit - (address - 2) < 4) - return bfd_reloc_outofrange; + if (!bfd_reloc_offset_in_range (howto, input_bfd, input_section, + address - 2)) + return bfd_reloc_outofrange; value += addend; -- 2.30.2