From: Gunther Nikl Date: Tue, 12 May 2020 11:18:09 +0000 (+0100) Subject: [PATCH] bfd: Fix 64-bit relocation handling for a.out X-Git-Url: http://git.efficios.com/?a=commitdiff_plain;h=533f049e00492f00803c633fbd87a3f985000b22;p=deliverable%2Fbinutils-gdb.git [PATCH] bfd: Fix 64-bit relocation handling for a.out * aoutx.h (NAME (aout, swap_std_reloc_out)): Reject an unsupported relocation size. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 7852737886..34932e777f 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2020-05-12 Gunther Nikl + + * aoutx.h (NAME (aout, swap_std_reloc_out)): Reject an unsupported + relocation size. + 2020-05-11 Alan Modra * elf64-ppc.c (xlate_pcrel_opt): Handle lxvp and stxvp. diff --git a/bfd/aoutx.h b/bfd/aoutx.h index d5457461ab..9ffb3fe861 100644 --- a/bfd/aoutx.h +++ b/bfd/aoutx.h @@ -1946,10 +1946,22 @@ NAME (aout, swap_std_reloc_out) (bfd *abfd, BFD_ASSERT (g->howto != NULL); - if (bfd_get_reloc_size (g->howto) != 8) - r_length = g->howto->size; /* Size as a power of two. */ - else - r_length = 3; + switch (bfd_get_reloc_size (g->howto)) + { + default: + _bfd_error_handler (_("%pB: unsupported AOUT relocation size: %d"), + abfd, bfd_get_reloc_size (g->howto)); + bfd_set_error (bfd_error_bad_value); + return; + case 1: + case 2: + case 4: + r_length = g->howto->size; /* Size as a power of two. */ + break; + case 8: + r_length = 3; + break; + } r_pcrel = (int) g->howto->pc_relative; /* Relative to PC? */ /* XXX This relies on relocs coming from a.out files. */