From 533f049e00492f00803c633fbd87a3f985000b22 Mon Sep 17 00:00:00 2001 From: Gunther Nikl Date: Tue, 12 May 2020 12:18:09 +0100 Subject: [PATCH] [PATCH] bfd: Fix 64-bit relocation handling for a.out * aoutx.h (NAME (aout, swap_std_reloc_out)): Reject an unsupported relocation size. --- bfd/ChangeLog | 5 +++++ bfd/aoutx.h | 20 ++++++++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 78527378867..34932e777f9 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 d5457461ab0..9ffb3fe8610 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. */ -- 2.30.2