Upstream-Status: Backport 
[https://github.com/golang/go/commit/df9ce19db6df32d94eae8760927bdfbc595433c3]
CVE: CVE-2021-33198
Signed-off-by: Ralph Siemsen <[email protected]>
---
 meta/recipes-devtools/go/go-1.14.inc          |   1 +
 .../go/go-1.14/CVE-2021-33198.patch           | 113 ++++++++++++++++++
 2 files changed, 114 insertions(+)
 create mode 100644 meta/recipes-devtools/go/go-1.14/CVE-2021-33198.patch

diff --git a/meta/recipes-devtools/go/go-1.14.inc 
b/meta/recipes-devtools/go/go-1.14.inc
index 63da997bf1..90f483c294 100644
--- a/meta/recipes-devtools/go/go-1.14.inc
+++ b/meta/recipes-devtools/go/go-1.14.inc
@@ -43,6 +43,7 @@ SRC_URI += "\
     file://0004-CVE-2022-32190.patch \
     file://CVE-2022-2880.patch \
     file://CVE-2021-33195.patch \
+    file://CVE-2021-33198.patch \
 "
 
 SRC_URI_append_libc-musl = " 
file://0009-ld-replace-glibc-dynamic-linker-with-musl.patch"
diff --git a/meta/recipes-devtools/go/go-1.14/CVE-2021-33198.patch 
b/meta/recipes-devtools/go/go-1.14/CVE-2021-33198.patch
new file mode 100644
index 0000000000..241c08dad7
--- /dev/null
+++ b/meta/recipes-devtools/go/go-1.14/CVE-2021-33198.patch
@@ -0,0 +1,113 @@
+From c8866491ac424cdf39aedb325e6dec9e54418cfb Mon Sep 17 00:00:00 2001
+From: Robert Griesemer <[email protected]>
+Date: Sun, 2 May 2021 11:27:03 -0700
+Subject: [PATCH] math/big: check for excessive exponents in Rat.SetString
+
+CVE-2021-33198
+
+Upstream-Status: Backport 
[https://github.com/golang/go/commit/df9ce19db6df32d94eae8760927bdfbc595433c3]
+CVE: CVE-2021-33198
+Signed-off-by: Ralph Siemsen <[email protected]>
+
+
+Found by OSS-Fuzz https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=33284
+
+Thanks to Emmanuel Odeke for reporting this issue.
+
+Updates #45910
+Fixes #46305
+Fixes CVE-2021-33198
+
+Change-Id: I61e7b04dbd80343420b57eede439e361c0f7b79c
+Reviewed-on: https://go-review.googlesource.com/c/go/+/316149
+Trust: Robert Griesemer <[email protected]>
+Trust: Katie Hockman <[email protected]>
+Run-TryBot: Robert Griesemer <[email protected]>
+TryBot-Result: Go Bot <[email protected]>
+Reviewed-by: Katie Hockman <[email protected]>
+Reviewed-by: Emmanuel Odeke <[email protected]>
+(cherry picked from commit 6c591f79b0b5327549bd4e94970f7a279efb4ab0)
+Reviewed-on: https://go-review.googlesource.com/c/go/+/321831
+Run-TryBot: Katie Hockman <[email protected]>
+Reviewed-by: Roland Shoemaker <[email protected]>
+---
+ src/math/big/ratconv.go      | 15 ++++++++-------
+ src/math/big/ratconv_test.go | 25 +++++++++++++++++++++++++
+ 2 files changed, 33 insertions(+), 7 deletions(-)
+
+diff --git a/src/math/big/ratconv.go b/src/math/big/ratconv.go
+index e8cbdbe..90053a9 100644
+--- a/src/math/big/ratconv.go
++++ b/src/math/big/ratconv.go
+@@ -51,7 +51,8 @@ func (z *Rat) Scan(s fmt.ScanState, ch rune) error {
+ // An optional base-10 ``e'' or base-2 ``p'' (or their upper-case variants)
+ // exponent may be provided as well, except for hexadecimal floats which
+ // only accept an (optional) ``p'' exponent (because an ``e'' or ``E'' cannot
+-// be distinguished from a mantissa digit).
++// be distinguished from a mantissa digit). If the exponent's absolute value
++// is too large, the operation may fail.
+ // The entire string, not just a prefix, must be valid for success. If the
+ // operation failed, the value of z is undefined but the returned value is 
nil.
+ func (z *Rat) SetString(s string) (*Rat, bool) {
+@@ -174,6 +175,9 @@ func (z *Rat) SetString(s string) (*Rat, bool) {
+                               return nil, false
+                       }
+               }
++              if n > 1e6 {
++                      return nil, false // avoid excessively large exponents
++              }
+               pow5 := z.b.abs.expNN(natFive, nat(nil).setWord(Word(n)), nil) 
// use underlying array of z.b.abs
+               if exp5 > 0 {
+                       z.a.abs = z.a.abs.mul(z.a.abs, pow5)
+@@ -186,15 +190,12 @@ func (z *Rat) SetString(s string) (*Rat, bool) {
+       }
+ 
+       // apply exp2 contributions
++      if exp2 < -1e7 || exp2 > 1e7 {
++              return nil, false // avoid excessively large exponents
++      }
+       if exp2 > 0 {
+-              if int64(uint(exp2)) != exp2 {
+-                      panic("exponent too large")
+-              }
+               z.a.abs = z.a.abs.shl(z.a.abs, uint(exp2))
+       } else if exp2 < 0 {
+-              if int64(uint(-exp2)) != -exp2 {
+-                      panic("exponent too large")
+-              }
+               z.b.abs = z.b.abs.shl(z.b.abs, uint(-exp2))
+       }
+ 
+diff --git a/src/math/big/ratconv_test.go b/src/math/big/ratconv_test.go
+index b820df4..e55e655 100644
+--- a/src/math/big/ratconv_test.go
++++ b/src/math/big/ratconv_test.go
+@@ -590,3 +590,28 @@ func TestIssue31184(t *testing.T) {
+               }
+       }
+ }
++
++func TestIssue45910(t *testing.T) {
++      var x Rat
++      for _, test := range []struct {
++              input string
++              want  bool
++      }{
++              {"1e-1000001", false},
++              {"1e-1000000", true},
++              {"1e+1000000", true},
++              {"1e+1000001", false},
++
++              {"0p1000000000000", true},
++              {"1p-10000001", false},
++              {"1p-10000000", true},
++              {"1p+10000000", true},
++              {"1p+10000001", false},
++              {"1.770p02041010010011001001", false}, // test case from issue
++      } {
++              _, got := x.SetString(test.input)
++              if got != test.want {
++                      t.Errorf("SetString(%s) got ok = %v; want %v", 
test.input, got, test.want)
++              }
++      }
++}
-- 
2.25.1

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#173435): 
https://lists.openembedded.org/g/openembedded-core/message/173435
Mute This Topic: https://lists.openembedded.org/mt/95093842/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to