From: Andy Polyakov Date: Fri, 6 Jul 2018 11:16:40 +0000 (+0200) Subject: bn/bn_lib.c: remove bn_check_top from bn_expand2. X-Git-Tag: OpenSSL_1_1_0i~51 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=cc1fef6308ec6cb8ba6c00b20e4a8014d7847db2;p=oweals%2Fopenssl.git bn/bn_lib.c: remove bn_check_top from bn_expand2. Trouble is that addition is postponing expansion till carry is calculated, and if addition carries, top word can be zero, which triggers assertion in bn_check_top. Reviewed-by: Rich Salz Reviewed-by: David Benjamin (Merged from https://github.com/openssl/openssl/pull/6662) (cherry picked from commit e42395e637c3507b80b25c7ed63236898822d2f1) --- diff --git a/crypto/bn/bn_lib.c b/crypto/bn/bn_lib.c index c59bdb7c9e..8fa9f2f09f 100644 --- a/crypto/bn/bn_lib.c +++ b/crypto/bn/bn_lib.c @@ -222,8 +222,6 @@ static BN_ULONG *bn_expand_internal(const BIGNUM *b, int words) const BN_ULONG *B; int i; - bn_check_top(b); - if (words > (INT_MAX / (4 * BN_BITS2))) { BNerr(BN_F_BN_EXPAND_INTERNAL, BN_R_BIGNUM_TOO_LONG); return NULL; @@ -298,8 +296,6 @@ static BN_ULONG *bn_expand_internal(const BIGNUM *b, int words) BIGNUM *bn_expand2(BIGNUM *b, int words) { - bn_check_top(b); - if (words > b->dmax) { BN_ULONG *a = bn_expand_internal(b, words); if (!a) @@ -312,7 +308,6 @@ BIGNUM *bn_expand2(BIGNUM *b, int words) b->dmax = words; } - bn_check_top(b); return b; }