From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Sat, 21 Jun 2025 06:36:56 +0800

Upstream-Status: Backport [https://sourceware.org/git/?p=binutils-gdb.git;a=patch;h08c3cbe5926e4d355b5cb70bbec2b1eeb40c2944]
CVE: CVE-2025-7545

Since the output section contents are copied from the input, don't
extend the output section size beyond the input section size.

	PR binutils/33049
	* objcopy.c (copy_section): Don't extend the output section
	size beyond the input section size.

Signed-off-by: Deepesh Varatharajan <Deepesh.Varatharajan@windriver.com>

diff --git a/binutils/objcopy.c b/binutils/objcopy.c
index e2e6bd7e..3cbb3977 100644
--- a/binutils/objcopy.c
+++ b/binutils/objcopy.c
@@ -4634,6 +4634,7 @@ copy_section (bfd *ibfd, sec_ptr isection, bfd *obfd)
 	  char *to = (char *) memhunk;
 	  char *end = (char *) memhunk + size;
 	  int i;
+	  bfd_size_type memhunk_size = size;
 
 	  /* If the section address is not exactly divisible by the interleave,
 	     then we must bias the from address.  If the copy_byte is less than
@@ -4653,6 +4654,11 @@ copy_section (bfd *ibfd, sec_ptr isection, bfd *obfd)
 	      }
 
 	  size = (size + interleave - 1 - copy_byte) / interleave * copy_width;
+
+          /* Don't extend the output section size.  */
+          if (size > memhunk_size)
+            size = memhunk_size;
+	  
 	  osection->lma /= interleave;
 	  if (copy_byte < extra)
 	    osection->lma++;
