diff mbox series

[scarthgap] binutils: Fix CVE-2025-7545

Message ID 20250724103153.532074-1-Deepesh.Varatharajan@windriver.com
State Under Review
Delegated to: Steve Sakoman
Headers show
Series [scarthgap] binutils: Fix CVE-2025-7545 | expand

Commit Message

Deepesh Varatharajan July 24, 2025, 10:31 a.m. UTC
From: Deepesh Varatharajan <Deepesh.Varatharajan@windriver.com>

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

Backport a patch from upstream to fix CVE-2025-7545
Upstream-Status: Backport [https://sourceware.org/git/?p=binutils-gdb.git;a=patch;h=08c3cbe5926e4d355b5cb70bbec2b1eeb40c2944]

Signed-off-by: Deepesh Varatharajan <Deepesh.Varatharajan@windriver.com>
---
 .../binutils/binutils-2.42.inc                |  1 +
 .../binutils/0023-CVE-2025-7545.patch         | 39 +++++++++++++++++++
 2 files changed, 40 insertions(+)
 create mode 100644 meta/recipes-devtools/binutils/binutils/0023-CVE-2025-7545.patch

Comments

Gyorgy Sarvari July 24, 2025, 3:48 p.m. UTC | #1
On 7/24/25 12:31, Varatharajan, Deepesh via lists.openembedded.org wrote:
> From: Deepesh Varatharajan <Deepesh.Varatharajan@windriver.com>
>
> objcopy: Don't extend the output section size
> Since the output section contents are copied from the input, don't
> extend the output section size beyond the input section size.
>
> Backport a patch from upstream to fix CVE-2025-7545
> Upstream-Status: Backport [https://sourceware.org/git/?p=binutils-gdb.git;a=patch;h=08c3cbe5926e4d355b5cb70bbec2b1eeb40c2944]
>
> Signed-off-by: Deepesh Varatharajan <Deepesh.Varatharajan@windriver.com>
> ---
>  .../binutils/binutils-2.42.inc                |  1 +
>  .../binutils/0023-CVE-2025-7545.patch         | 39 +++++++++++++++++++
>  2 files changed, 40 insertions(+)
>  create mode 100644 meta/recipes-devtools/binutils/binutils/0023-CVE-2025-7545.patch
>
> diff --git a/meta/recipes-devtools/binutils/binutils-2.42.inc b/meta/recipes-devtools/binutils/binutils-2.42.inc
> index 9471e6accd..c2685948f7 100644
> --- a/meta/recipes-devtools/binutils/binutils-2.42.inc
> +++ b/meta/recipes-devtools/binutils/binutils-2.42.inc
> @@ -53,5 +53,6 @@ SRC_URI = "\
>       file://CVE-2025-1179.patch \
>       file://0022-CVE-2025-5245.patch \
>       file://0022-CVE-2025-5244.patch \
> +     file://0023-CVE-2025-7545.patch \
>  "
>  S  = "${WORKDIR}/git"
> diff --git a/meta/recipes-devtools/binutils/binutils/0023-CVE-2025-7545.patch b/meta/recipes-devtools/binutils/binutils/0023-CVE-2025-7545.patch
> new file mode 100644
> index 0000000000..de132f74fc
> --- /dev/null
> +++ b/meta/recipes-devtools/binutils/binutils/0023-CVE-2025-7545.patch
> @@ -0,0 +1,39 @@
> +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]

It's a very small thing, but it caused me quite some head scratching
while reviewing this. When I visit this link, it leads me to a
completely different commit, which I didn't really understand.
After a few minutes of intense staring, I noticed the problem (good link
over the bad one): 

https://sourceware.org/git/?p=binutils-gdb.git;a=patch;h=08c3cbe5926e4d355b5cb70bbec2b1eeb40c2944
https://sourceware.org/git/?p=binutils-gdb.git;a=patch;h08c3cbe5926e4d355b5cb70bbec2b1eeb40c2944

A "=" is missing from the patch's link. (But otherwise the patch itself
looks OK)

> +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 a85d2620..18cd1bfd 100644
> +--- a/binutils/objcopy.c
> ++++ b/binutils/objcopy.c
> +@@ -4547,6 +4547,7 @@ copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
> + 	  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
> +@@ -4566,6 +4567,11 @@ copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
> + 	      }
> + 
> + 	  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++;
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#220833): https://lists.openembedded.org/g/openembedded-core/message/220833
> Mute This Topic: https://lists.openembedded.org/mt/114318691/6084445
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [skandigraun@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Khem Raj July 24, 2025, 3:57 p.m. UTC | #2
On Thu, Jul 24, 2025 at 3:32 AM Varatharajan, Deepesh via
lists.openembedded.org
<deepesh.varatharajan=windriver.com@lists.openembedded.org> wrote:
>
> From: Deepesh Varatharajan <Deepesh.Varatharajan@windriver.com>
>
> objcopy: Don't extend the output section size
> Since the output section contents are copied from the input, don't
> extend the output section size beyond the input section size.
>
> Backport a patch from upstream to fix CVE-2025-7545
> Upstream-Status: Backport [https://sourceware.org/git/?p=binutils-gdb.git;a=patch;h=08c3cbe5926e4d355b5cb70bbec2b1eeb40c2944]
>

Looks good.

> Signed-off-by: Deepesh Varatharajan <Deepesh.Varatharajan@windriver.com>
> ---
>  .../binutils/binutils-2.42.inc                |  1 +
>  .../binutils/0023-CVE-2025-7545.patch         | 39 +++++++++++++++++++
>  2 files changed, 40 insertions(+)
>  create mode 100644 meta/recipes-devtools/binutils/binutils/0023-CVE-2025-7545.patch
>
> diff --git a/meta/recipes-devtools/binutils/binutils-2.42.inc b/meta/recipes-devtools/binutils/binutils-2.42.inc
> index 9471e6accd..c2685948f7 100644
> --- a/meta/recipes-devtools/binutils/binutils-2.42.inc
> +++ b/meta/recipes-devtools/binutils/binutils-2.42.inc
> @@ -53,5 +53,6 @@ SRC_URI = "\
>       file://CVE-2025-1179.patch \
>       file://0022-CVE-2025-5245.patch \
>       file://0022-CVE-2025-5244.patch \
> +     file://0023-CVE-2025-7545.patch \
>  "
>  S  = "${WORKDIR}/git"
> diff --git a/meta/recipes-devtools/binutils/binutils/0023-CVE-2025-7545.patch b/meta/recipes-devtools/binutils/binutils/0023-CVE-2025-7545.patch
> new file mode 100644
> index 0000000000..de132f74fc
> --- /dev/null
> +++ b/meta/recipes-devtools/binutils/binutils/0023-CVE-2025-7545.patch
> @@ -0,0 +1,39 @@
> +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 a85d2620..18cd1bfd 100644
> +--- a/binutils/objcopy.c
> ++++ b/binutils/objcopy.c
> +@@ -4547,6 +4547,7 @@ copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
> +         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
> +@@ -4566,6 +4567,11 @@ copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
> +             }
> +
> +         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++;
> --
> 2.49.0
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#220833): https://lists.openembedded.org/g/openembedded-core/message/220833
> Mute This Topic: https://lists.openembedded.org/mt/114318691/1997914
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [raj.khem@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
diff mbox series

Patch

diff --git a/meta/recipes-devtools/binutils/binutils-2.42.inc b/meta/recipes-devtools/binutils/binutils-2.42.inc
index 9471e6accd..c2685948f7 100644
--- a/meta/recipes-devtools/binutils/binutils-2.42.inc
+++ b/meta/recipes-devtools/binutils/binutils-2.42.inc
@@ -53,5 +53,6 @@  SRC_URI = "\
      file://CVE-2025-1179.patch \
      file://0022-CVE-2025-5245.patch \
      file://0022-CVE-2025-5244.patch \
+     file://0023-CVE-2025-7545.patch \
 "
 S  = "${WORKDIR}/git"
diff --git a/meta/recipes-devtools/binutils/binutils/0023-CVE-2025-7545.patch b/meta/recipes-devtools/binutils/binutils/0023-CVE-2025-7545.patch
new file mode 100644
index 0000000000..de132f74fc
--- /dev/null
+++ b/meta/recipes-devtools/binutils/binutils/0023-CVE-2025-7545.patch
@@ -0,0 +1,39 @@ 
+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 a85d2620..18cd1bfd 100644
+--- a/binutils/objcopy.c
++++ b/binutils/objcopy.c
+@@ -4547,6 +4547,7 @@ copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
+ 	  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
+@@ -4566,6 +4567,11 @@ copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
+ 	      }
+ 
+ 	  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++;