diff options
author | Matt Caswell <matt@openssl.org> | 2015-08-10 12:00:29 +0100 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2015-08-11 20:20:24 +0100 |
commit | 512368c9ed4d53fb230000e83071eb81bf628b22 (patch) | |
tree | f4fe0e828a7793f598c7b8e48d004e554140b7cc /crypto/bn | |
parent | ada57746b6b80beae73111fe1291bf8dd89af91c (diff) |
Check for 0 modulus in BN_MONT_CTX_set
The function BN_MONT_CTX_set was assuming that the modulus was non-zero
and therefore that |mod->top| > 0. In an error situation that may not be
the case and could cause a seg fault.
This is a follow on from CVE-2015-1794.
Reviewed-by: Richard Levitte <levitte@openssl.org>
Diffstat (limited to 'crypto/bn')
-rw-r--r-- | crypto/bn/bn_mont.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/crypto/bn/bn_mont.c b/crypto/bn/bn_mont.c index aafd1b8526..be95bd55d0 100644 --- a/crypto/bn/bn_mont.c +++ b/crypto/bn/bn_mont.c @@ -373,6 +373,9 @@ int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx) int ret = 0; BIGNUM *Ri, *R; + if (BN_is_zero(mod)) + return 0; + BN_CTX_start(ctx); if ((Ri = BN_CTX_get(ctx)) == NULL) goto err; |