[PATCH] strip: Ignore --reloc-debug-sections-only for non-ET_REL files.

Aaron Merey amerey@redhat.com
Tue Nov 5 22:53:38 GMT 2024


strip --reloc-debug-sections-only is expected to be a no-op for
non-ET_REL files.  This was not enforced in the code.  Sections
were copied over to a new output file and normally its contents
would be identical to the input file.

However the output file is not identical to a non-ET_REL input
file if the linker organized sections such that the indices of
SHF_ALLOC sections are not in a contigous group.

In this case strip will modify sections in order to keep all SHF_ALLOC
sections in a contiguous group.

Fix this by ignoring --reloc-debug-sections-only for non-ET_REL files.

https://sourceware.org/bugzilla/show_bug.cgi?id=32253

Signed-off-by: Aaron Merey <amerey@redhat.com>
---
 src/strip.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/strip.c b/src/strip.c
index 403e0f6f..3812fb17 100644
--- a/src/strip.c
+++ b/src/strip.c
@@ -1139,6 +1139,13 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
 
   if (reloc_debug_only)
     {
+      if (ehdr->e_type != ET_REL)
+	{
+	  /* Only ET_REL files should have debug relocations to remove.  */
+	  error (0, 0, _("Ignoring --reloc-debug-sections-only for " \
+			 "non-ET_REL file '%s'"), fname);
+	  goto fail_close;
+	}
       if (handle_debug_relocs (elf, ebl, newelf, ehdr, fname, shstrndx,
 			       &lastsec_offset, &lastsec_size) != 0)
 	{
-- 
2.47.0



More information about the Elfutils-devel mailing list