-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Integer Overflow vulnerability in mp_grow in libtom libtommath before commit beba892bc0d4e4ded4d667ab1d2a94f4d75109a9, allows attackers to execute arbitrary code and cause a denial of service (DoS). References: https://nvd.nist.gov/vuln/detail/CVE-2023-36328 libtom/libtommath#546 (From OE-Core rev: 38709b0d35e7bd6760285bfa926dc85985c5cdcd) Signed-off-by: Yogita Urade <[email protected]> Signed-off-by: Steve Sakoman <[email protected]>
- Loading branch information
Showing
2 changed files
with
145 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
144 changes: 144 additions & 0 deletions
144
meta/recipes-core/dropbear/dropbear/CVE-2023-36328.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,144 @@ | ||
From beba892bc0d4e4ded4d667ab1d2a94f4d75109a9 Mon Sep 17 00:00:00 2001 | ||
From: czurnieden <[email protected]> | ||
Date: Wed, 6 Sep 2023 10:48:58 +0000 | ||
Subject: [PATCH] Fix possible integer overflow | ||
|
||
CVE: CVE-2023-36328 | ||
|
||
Upstream-Status: Backport [https://github.com/libtom/libtommath/commit/beba892bc0d4e4ded4d667ab1d2a94f4d75109a9] | ||
|
||
Signed-off-by: Yogita Urade <[email protected]> | ||
--- | ||
libtommath/bn_mp_2expt.c | 4 ++++ | ||
libtommath/bn_mp_grow.c | 4 ++++ | ||
libtommath/bn_mp_init_size.c | 5 +++++ | ||
libtommath/bn_mp_mul_2d.c | 4 ++++ | ||
libtommath/bn_s_mp_mul_digs.c | 4 ++++ | ||
libtommath/bn_s_mp_mul_digs_fast.c | 4 ++++ | ||
libtommath/bn_s_mp_mul_high_digs.c | 4 ++++ | ||
libtommath/bn_s_mp_mul_high_digs_fast.c | 4 ++++ | ||
8 files changed, 33 insertions(+) | ||
|
||
diff --git a/libtommath/bn_mp_2expt.c b/libtommath/bn_mp_2expt.c | ||
index 0ae3df1..7d4d884 100644 | ||
--- a/libtommath/bn_mp_2expt.c | ||
+++ b/libtommath/bn_mp_2expt.c | ||
@@ -12,6 +12,10 @@ mp_err mp_2expt(mp_int *a, int b) | ||
{ | ||
mp_err err; | ||
|
||
+ if (b < 0) { | ||
+ return MP_VAL; | ||
+ } | ||
+ | ||
/* zero a as per default */ | ||
mp_zero(a); | ||
|
||
diff --git a/libtommath/bn_mp_grow.c b/libtommath/bn_mp_grow.c | ||
index 9e904c5..e7b186c 100644 | ||
--- a/libtommath/bn_mp_grow.c | ||
+++ b/libtommath/bn_mp_grow.c | ||
@@ -9,6 +9,10 @@ mp_err mp_grow(mp_int *a, int size) | ||
int i; | ||
mp_digit *tmp; | ||
|
||
+ if (size < 0) { | ||
+ return MP_VAL; | ||
+ } | ||
+ | ||
/* if the alloc size is smaller alloc more ram */ | ||
if (a->alloc < size) { | ||
/* reallocate the array a->dp | ||
diff --git a/libtommath/bn_mp_init_size.c b/libtommath/bn_mp_init_size.c | ||
index d622687..5fefa96 100644 | ||
--- a/libtommath/bn_mp_init_size.c | ||
+++ b/libtommath/bn_mp_init_size.c | ||
@@ -6,6 +6,11 @@ | ||
/* init an mp_init for a given size */ | ||
mp_err mp_init_size(mp_int *a, int size) | ||
{ | ||
+ | ||
+ if (size < 0) { | ||
+ return MP_VAL; | ||
+ } | ||
+ | ||
size = MP_MAX(MP_MIN_PREC, size); | ||
|
||
/* alloc mem */ | ||
diff --git a/libtommath/bn_mp_mul_2d.c b/libtommath/bn_mp_mul_2d.c | ||
index 87354de..2744163 100644 | ||
--- a/libtommath/bn_mp_mul_2d.c | ||
+++ b/libtommath/bn_mp_mul_2d.c | ||
@@ -9,6 +9,10 @@ mp_err mp_mul_2d(const mp_int *a, int b, mp_int *c) | ||
mp_digit d; | ||
mp_err err; | ||
|
||
+ if (b < 0) { | ||
+ return MP_VAL; | ||
+ } | ||
+ | ||
/* copy */ | ||
if (a != c) { | ||
if ((err = mp_copy(a, c)) != MP_OKAY) { | ||
diff --git a/libtommath/bn_s_mp_mul_digs.c b/libtommath/bn_s_mp_mul_digs.c | ||
index 64509d4..2d2f5b0 100644 | ||
--- a/libtommath/bn_s_mp_mul_digs.c | ||
+++ b/libtommath/bn_s_mp_mul_digs.c | ||
@@ -16,6 +16,10 @@ mp_err s_mp_mul_digs(const mp_int *a, const mp_int *b, mp_int *c, int digs) | ||
mp_word r; | ||
mp_digit tmpx, *tmpt, *tmpy; | ||
|
||
+ if (digs < 0) { | ||
+ return MP_VAL; | ||
+ } | ||
+ | ||
/* can we use the fast multiplier? */ | ||
if ((digs < MP_WARRAY) && | ||
(MP_MIN(a->used, b->used) < MP_MAXFAST)) { | ||
diff --git a/libtommath/bn_s_mp_mul_digs_fast.c b/libtommath/bn_s_mp_mul_digs_fast.c | ||
index b2a287b..d6dd3cc 100644 | ||
--- a/libtommath/bn_s_mp_mul_digs_fast.c | ||
+++ b/libtommath/bn_s_mp_mul_digs_fast.c | ||
@@ -26,6 +26,10 @@ mp_err s_mp_mul_digs_fast(const mp_int *a, const mp_int *b, mp_int *c, int digs) | ||
mp_digit W[MP_WARRAY]; | ||
mp_word _W; | ||
|
||
+ if (digs < 0) { | ||
+ return MP_VAL; | ||
+ } | ||
+ | ||
/* grow the destination as required */ | ||
if (c->alloc < digs) { | ||
if ((err = mp_grow(c, digs)) != MP_OKAY) { | ||
diff --git a/libtommath/bn_s_mp_mul_high_digs.c b/libtommath/bn_s_mp_mul_high_digs.c | ||
index 2bb2a50..c9dd355 100644 | ||
--- a/libtommath/bn_s_mp_mul_high_digs.c | ||
+++ b/libtommath/bn_s_mp_mul_high_digs.c | ||
@@ -15,6 +15,10 @@ mp_err s_mp_mul_high_digs(const mp_int *a, const mp_int *b, mp_int *c, int digs) | ||
mp_word r; | ||
mp_digit tmpx, *tmpt, *tmpy; | ||
|
||
+ if (digs < 0) { | ||
+ return MP_VAL; | ||
+ } | ||
+ | ||
/* can we use the fast multiplier? */ | ||
if (MP_HAS(S_MP_MUL_HIGH_DIGS_FAST) | ||
&& ((a->used + b->used + 1) < MP_WARRAY) | ||
diff --git a/libtommath/bn_s_mp_mul_high_digs_fast.c b/libtommath/bn_s_mp_mul_high_digs_fast.c | ||
index a2c4fb6..4ce7f59 100644 | ||
--- a/libtommath/bn_s_mp_mul_high_digs_fast.c | ||
+++ b/libtommath/bn_s_mp_mul_high_digs_fast.c | ||
@@ -19,6 +19,10 @@ mp_err s_mp_mul_high_digs_fast(const mp_int *a, const mp_int *b, mp_int *c, int | ||
mp_digit W[MP_WARRAY]; | ||
mp_word _W; | ||
|
||
+ if (digs < 0) { | ||
+ return MP_VAL; | ||
+ } | ||
+ | ||
/* grow the destination as required */ | ||
pa = a->used + b->used; | ||
if (c->alloc < pa) { | ||
-- | ||
2.35.5 |