diff options
author | Emilia Kasper <emilia@openssl.org> | 2014-12-15 14:52:22 +0100 |
---|---|---|
committer | Emilia Kasper <emilia@openssl.org> | 2014-12-17 10:01:04 +0100 |
commit | a015758d11f8fd2171a3b73be60e90bed1bd857e (patch) | |
tree | 46f354b5ee2750793493555607ff063d00eca1f0 /crypto/bn | |
parent | 789da2c73d875af59b14156b6295aa4bdfc4f424 (diff) | |
download | openssl-a015758d11f8fd2171a3b73be60e90bed1bd857e.tar.gz |
Check for invalid divisors in BN_div.
Invalid zero-padding in the divisor could cause a division by 0.
Reviewed-by: Richard Levitte <levitte@openssl.org>
(cherry picked from commit a43bcd9e96c5180e5c6c82164ece643c0097485e)
Diffstat (limited to 'crypto/bn')
-rw-r--r-- | crypto/bn/bn_div.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/crypto/bn/bn_div.c b/crypto/bn/bn_div.c index 06d87d0aaf..1b5c29c7ac 100644 --- a/crypto/bn/bn_div.c +++ b/crypto/bn/bn_div.c @@ -190,15 +190,17 @@ int BN_div(BIGNUM *dv, BIGNUM *rm, const BIGNUM *num, const BIGNUM *divisor, int no_branch=0; /* Invalid zero-padding would have particularly bad consequences - * in the case of 'num', so don't just rely on bn_check_top() for this one + * so don't just rely on bn_check_top() here * (bn_check_top() works only for BN_DEBUG builds) */ - if (num->top > 0 && num->d[num->top - 1] == 0) + if ((num->top > 0 && num->d[num->top - 1] == 0) || + (divisor->top > 0 && divisor->d[divisor->top - 1] == 0)) { BNerr(BN_F_BN_DIV,BN_R_NOT_INITIALIZED); return 0; } bn_check_top(num); + bn_check_top(divisor); if ((BN_get_flags(num, BN_FLG_CONSTTIME) != 0) || (BN_get_flags(divisor, BN_FLG_CONSTTIME) != 0)) { @@ -208,7 +210,7 @@ int BN_div(BIGNUM *dv, BIGNUM *rm, const BIGNUM *num, const BIGNUM *divisor, bn_check_top(dv); bn_check_top(rm); /* bn_check_top(num); */ /* 'num' has been checked already */ - bn_check_top(divisor); + /* bn_check_top(divisor); */ /* 'divisor' has been checked already */ if (BN_is_zero(divisor)) { |