From b1b29aa51a6a67d5e35391ad31a80765839d6eb4 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Fri, 8 Jan 2021 21:38:39 -0800 Subject: [PATCH] elf: Verify section size for mixed ordered/unordered inputs When fixing up SHF_LINK_ORDER, issue a fatal error if the output section size is increased. Otherwise, bfd_set_section_contents will fail later when attempting to write contents past the end of the output section. PR ld/26256 PR ld/27160 * elflink.c (elf_fixup_link_order): Verify that fixing up SHF_LINK_ORDER doesn't increase the output section size. --- bfd/ChangeLog | 7 +++++++ bfd/elflink.c | 8 ++++++++ 2 files changed, 15 insertions(+) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index baf6af94bb4..86fec902024 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2021-01-08 H.J. Lu + + PR ld/26256 + PR ld/27160 + * elflink.c (elf_fixup_link_order): Verify that fixing up + SHF_LINK_ORDER doesn't increase the output section size. + 2021-01-09 Alan Modra * configure: Regenerate. diff --git a/bfd/elflink.c b/bfd/elflink.c index a7c952b6fc1..acc959d526a 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -12039,6 +12039,14 @@ elf_fixup_link_order (struct bfd_link_info *info, bfd *abfd, asection *o) offset = sections[n]->offset + sections[n]->size; free (sections); + + /* Verify that fixing up SHF_LINK_ORDER doesn't increase the section + size. */ + if (offset > o->size) + info->callbacks->einfo + (_("%F%P: %pA has ordered sections with incompatible alignments\n"), + o); + return TRUE; } -- 2.30.2