[meta-oe,v2] gmp: Add security fix for CVE-2021-43618

Message ID 20211122115418.1352-1-pavel@zhukoff.net
State New
Headers show
Series [meta-oe,v2] gmp: Add security fix for CVE-2021-43618 | expand

Commit Message

Pavel Zhukov Nov. 22, 2021, 11:54 a.m. UTC
From: Pavel Zhukov <pavel.zhukov@huawei.com>

Fix mpz/inp_raw.c integer overflow and resultant buffer overflow via crafted input,
leading to a segmentation fault on 32-bit platforms.

References: https://gmplib.org/repo/gmp-6.2/rev/561a9c25298e
References: https://gmplib.org/list-archives/gmp-bugs/2021-September/005077.html
References: https://bugs.debian.org/994405

Signed-off-by: Pavel Zhukov <pavel.zhukov@huawei.com>
---
 .../gmp/gmp/CVE-2021-43618.patch              | 25 +++++++++++++++++++
 meta/recipes-support/gmp/gmp_6.2.1.bb         |  1 +
 2 files changed, 26 insertions(+)
 create mode 100644 meta/recipes-support/gmp/gmp/CVE-2021-43618.patch

Comments

Ross Burton Nov. 22, 2021, noon UTC | #1
Hi Pavel,

Close but you also need Upstream-Status, Signed-off-by, and CVE tags
in the patch.  You can see my version of this fix on the list, a few
minutes before yours. :)

Ross

On Mon, 22 Nov 2021 at 11:54, Pavel Zhukov <pavel@zhukoff.net> wrote:
>
> From: Pavel Zhukov <pavel.zhukov@huawei.com>
>
> Fix mpz/inp_raw.c integer overflow and resultant buffer overflow via crafted input,
> leading to a segmentation fault on 32-bit platforms.
>
> References: https://gmplib.org/repo/gmp-6.2/rev/561a9c25298e
> References: https://gmplib.org/list-archives/gmp-bugs/2021-September/005077.html
> References: https://bugs.debian.org/994405
>
> Signed-off-by: Pavel Zhukov <pavel.zhukov@huawei.com>
> ---
>  .../gmp/gmp/CVE-2021-43618.patch              | 25 +++++++++++++++++++
>  meta/recipes-support/gmp/gmp_6.2.1.bb         |  1 +
>  2 files changed, 26 insertions(+)
>  create mode 100644 meta/recipes-support/gmp/gmp/CVE-2021-43618.patch
>
> diff --git a/meta/recipes-support/gmp/gmp/CVE-2021-43618.patch b/meta/recipes-support/gmp/gmp/CVE-2021-43618.patch
> new file mode 100644
> index 0000000000..f741972439
> --- /dev/null
> +++ b/meta/recipes-support/gmp/gmp/CVE-2021-43618.patch
> @@ -0,0 +1,25 @@
> +
> +# HG changeset patch
> +# User Marco Bodrato <bodrato@mail.dm.unipi.it>
> +# Date 1634836009 -7200
> +# Node ID 561a9c25298e17bb01896801ff353546c6923dbd
> +# Parent  e1fd9db13b475209a864577237ea4b9105b3e96e
> +mpz/inp_raw.c: Avoid bit size overflows
> +
> +diff -r e1fd9db13b47 -r 561a9c25298e mpz/inp_raw.c
> +--- a/mpz/inp_raw.c    Tue Dec 22 23:49:51 2020 +0100
> ++++ b/mpz/inp_raw.c    Thu Oct 21 19:06:49 2021 +0200
> +@@ -88,8 +88,11 @@
> +
> +   abs_csize = ABS (csize);
> +
> ++  if (UNLIKELY (abs_csize > ~(mp_bitcnt_t) 0 / 8))
> ++    return 0; /* Bit size overflows */
> ++
> +   /* round up to a multiple of limbs */
> +-  abs_xsize = BITS_TO_LIMBS (abs_csize*8);
> ++  abs_xsize = BITS_TO_LIMBS ((mp_bitcnt_t) abs_csize * 8);
> +
> +   if (abs_xsize != 0)
> +     {
> +
> diff --git a/meta/recipes-support/gmp/gmp_6.2.1.bb b/meta/recipes-support/gmp/gmp_6.2.1.bb
> index d5996abd00..7c12a97228 100644
> --- a/meta/recipes-support/gmp/gmp_6.2.1.bb
> +++ b/meta/recipes-support/gmp/gmp_6.2.1.bb
> @@ -12,6 +12,7 @@ SRC_URI = "https://gmplib.org/download/${BPN}/${BP}${REVISION}.tar.bz2 \
>             file://use-includedir.patch \
>             file://0001-Append-the-user-provided-flags-to-the-auto-detected-.patch \
>             file://0001-confiure.ac-Believe-the-cflags-from-environment.patch \
> +           file://CVE-2021-43618.patch \
>             "
>  SRC_URI[md5sum] = "28971fc21cf028042d4897f02fd355ea"
>  SRC_URI[sha256sum] = "eae9326beb4158c386e39a356818031bd28f3124cf915f8c5b1dc4c7a36b4d7c"
> --
> 2.32.0
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#158563): https://lists.openembedded.org/g/openembedded-core/message/158563
> Mute This Topic: https://lists.openembedded.org/mt/87233112/1676615
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [ross@burtonini.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Konrad Weihmann Nov. 22, 2021, noon UTC | #2
Both of your patches don't meet the OE patch guideline [1].
Just look at Ross's patch for an exmaple [2]

So just in case for this one I would prefer picking Ross's patch, which 
seems to me does the very same


[1] 
https://www.openembedded.org/wiki/Commit_Patch_Message_Guidelines#Patch_Header_Recommendations:_Upstream-Status
[2] https://lists.openembedded.org/g/openembedded-core/message/158561

On 22.11.21 12:54, Pavel Zhukov wrote:
> From: Pavel Zhukov <pavel.zhukov@huawei.com>
> 
> Fix mpz/inp_raw.c integer overflow and resultant buffer overflow via crafted input,
> leading to a segmentation fault on 32-bit platforms.
> 
> References: https://gmplib.org/repo/gmp-6.2/rev/561a9c25298e
> References: https://gmplib.org/list-archives/gmp-bugs/2021-September/005077.html
> References: https://bugs.debian.org/994405
> 
> Signed-off-by: Pavel Zhukov <pavel.zhukov@huawei.com>
> ---
>   .../gmp/gmp/CVE-2021-43618.patch              | 25 +++++++++++++++++++
>   meta/recipes-support/gmp/gmp_6.2.1.bb         |  1 +
>   2 files changed, 26 insertions(+)
>   create mode 100644 meta/recipes-support/gmp/gmp/CVE-2021-43618.patch
> 
> diff --git a/meta/recipes-support/gmp/gmp/CVE-2021-43618.patch b/meta/recipes-support/gmp/gmp/CVE-2021-43618.patch
> new file mode 100644
> index 0000000000..f741972439
> --- /dev/null
> +++ b/meta/recipes-support/gmp/gmp/CVE-2021-43618.patch
> @@ -0,0 +1,25 @@
> +
> +# HG changeset patch
> +# User Marco Bodrato <bodrato@mail.dm.unipi.it>
> +# Date 1634836009 -7200
> +# Node ID 561a9c25298e17bb01896801ff353546c6923dbd
> +# Parent  e1fd9db13b475209a864577237ea4b9105b3e96e
> +mpz/inp_raw.c: Avoid bit size overflows
> +
> +diff -r e1fd9db13b47 -r 561a9c25298e mpz/inp_raw.c
> +--- a/mpz/inp_raw.c	Tue Dec 22 23:49:51 2020 +0100
> ++++ b/mpz/inp_raw.c	Thu Oct 21 19:06:49 2021 +0200
> +@@ -88,8 +88,11 @@
> +
> +   abs_csize = ABS (csize);
> +
> ++  if (UNLIKELY (abs_csize > ~(mp_bitcnt_t) 0 / 8))
> ++    return 0; /* Bit size overflows */
> ++
> +   /* round up to a multiple of limbs */
> +-  abs_xsize = BITS_TO_LIMBS (abs_csize*8);
> ++  abs_xsize = BITS_TO_LIMBS ((mp_bitcnt_t) abs_csize * 8);
> +
> +   if (abs_xsize != 0)
> +     {
> +
> diff --git a/meta/recipes-support/gmp/gmp_6.2.1.bb b/meta/recipes-support/gmp/gmp_6.2.1.bb
> index d5996abd00..7c12a97228 100644
> --- a/meta/recipes-support/gmp/gmp_6.2.1.bb
> +++ b/meta/recipes-support/gmp/gmp_6.2.1.bb
> @@ -12,6 +12,7 @@ SRC_URI = "https://gmplib.org/download/${BPN}/${BP}${REVISION}.tar.bz2 \
>              file://use-includedir.patch \
>              file://0001-Append-the-user-provided-flags-to-the-auto-detected-.patch \
>              file://0001-confiure.ac-Believe-the-cflags-from-environment.patch \
> +           file://CVE-2021-43618.patch \
>              "
>   SRC_URI[md5sum] = "28971fc21cf028042d4897f02fd355ea"
>   SRC_URI[sha256sum] = "eae9326beb4158c386e39a356818031bd28f3124cf915f8c5b1dc4c7a36b4d7c"
> 
> 
> 
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#158563): https://lists.openembedded.org/g/openembedded-core/message/158563
> Mute This Topic: https://lists.openembedded.org/mt/87233112/3647476
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [kweihmann@outlook.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>

Patch

diff --git a/meta/recipes-support/gmp/gmp/CVE-2021-43618.patch b/meta/recipes-support/gmp/gmp/CVE-2021-43618.patch
new file mode 100644
index 0000000000..f741972439
--- /dev/null
+++ b/meta/recipes-support/gmp/gmp/CVE-2021-43618.patch
@@ -0,0 +1,25 @@ 
+
+# HG changeset patch
+# User Marco Bodrato <bodrato@mail.dm.unipi.it>
+# Date 1634836009 -7200
+# Node ID 561a9c25298e17bb01896801ff353546c6923dbd
+# Parent  e1fd9db13b475209a864577237ea4b9105b3e96e
+mpz/inp_raw.c: Avoid bit size overflows
+
+diff -r e1fd9db13b47 -r 561a9c25298e mpz/inp_raw.c
+--- a/mpz/inp_raw.c	Tue Dec 22 23:49:51 2020 +0100
++++ b/mpz/inp_raw.c	Thu Oct 21 19:06:49 2021 +0200
+@@ -88,8 +88,11 @@
+ 
+   abs_csize = ABS (csize);
+ 
++  if (UNLIKELY (abs_csize > ~(mp_bitcnt_t) 0 / 8))
++    return 0; /* Bit size overflows */
++
+   /* round up to a multiple of limbs */
+-  abs_xsize = BITS_TO_LIMBS (abs_csize*8);
++  abs_xsize = BITS_TO_LIMBS ((mp_bitcnt_t) abs_csize * 8);
+ 
+   if (abs_xsize != 0)
+     {
+
diff --git a/meta/recipes-support/gmp/gmp_6.2.1.bb b/meta/recipes-support/gmp/gmp_6.2.1.bb
index d5996abd00..7c12a97228 100644
--- a/meta/recipes-support/gmp/gmp_6.2.1.bb
+++ b/meta/recipes-support/gmp/gmp_6.2.1.bb
@@ -12,6 +12,7 @@  SRC_URI = "https://gmplib.org/download/${BPN}/${BP}${REVISION}.tar.bz2 \
            file://use-includedir.patch \
            file://0001-Append-the-user-provided-flags-to-the-auto-detected-.patch \
            file://0001-confiure.ac-Believe-the-cflags-from-environment.patch \
+           file://CVE-2021-43618.patch \
            "
 SRC_URI[md5sum] = "28971fc21cf028042d4897f02fd355ea"
 SRC_URI[sha256sum] = "eae9326beb4158c386e39a356818031bd28f3124cf915f8c5b1dc4c7a36b4d7c"