objtool: Update section header before relocations
authorMichael Forney <mforney@mforney.org>
Sun, 9 May 2021 00:01:03 +0000 (17:01 -0700)
committerJosh Poimboeuf <jpoimboe@redhat.com>
Thu, 7 Oct 2021 03:11:57 +0000 (20:11 -0700)
commit86e1e054e0d2105cf32b0266cf1a64e6c26424f7
tree307354a08cc0e5c4c0fa9968b9b7bf84010104be
parentb46179d6bb3182c020f2bf9bb4df6ba5463b0495
objtool: Update section header before relocations

The libelf implementation from elftoolchain has a safety check in
gelf_update_rel[a] to check that the data corresponds to a section
that has type SHT_REL[A] [0]. If the relocation is updated before
the section header is updated with the proper type, this check
fails.

To fix this, update the section header first, before the relocations.
Previously, the section size was calculated in elf_rebuild_reloc_section
by counting the number of entries in the reloc_list. However, we
now need the size during elf_write so instead keep a running total
and add to it for every new relocation.

[0] https://sourceforge.net/p/elftoolchain/mailman/elftoolchain-developers/thread/CAGw6cBtkZro-8wZMD2ULkwJ39J+tHtTtAWXufMjnd3cQ7XG54g@mail.gmail.com/

Signed-off-by: Michael Forney <mforney@mforney.org>
Reviewed-by: Miroslav Benes <mbenes@suse.cz>
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
Link: https://lore.kernel.org/r/20210509000103.11008-2-mforney@mforney.org
tools/objtool/elf.c