boringssl/crypto/bn
David Benjamin 958aaf1ea1 Check for errors in BN_bn2dec()
If an oversize BIGNUM is presented to BN_bn2dec() it can cause
BN_div_word() to fail and not reduce the value of 't' resulting
in OOB writes to the bn_data buffer and eventually crashing.

Fix by checking return value of BN_div_word() and checking writes
don't overflow buffer.

Thanks to Shi Lei for reporting this bug.

CVE-2016-2182

(Imported from upstream's e36f27ddb80a48e579783bc29fb3758988342b71.)

Change-Id: Ib9078921b4460952c4aa5a6b03ec39a03704bb90
Reviewed-on: https://boringssl-review.googlesource.com/10367
CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
Commit-Queue: David Benjamin <davidben@google.com>
Commit-Queue: Adam Langley <agl@google.com>
Reviewed-by: Adam Langley <agl@google.com>
2016-08-16 19:46:35 +00:00
..
asm Switch perlasm calling convention. 2016-06-27 21:59:26 +00:00
add.c Switch unrolled loop in BN_usub with memcpy. 2015-12-16 17:38:48 +00:00
bn_asn1.c Rename the BIGNUM ASN.1 functions. 2016-01-27 22:37:44 +00:00
bn_test.cc Ensure |BN_div| never gives negative zero in the no_branch code. 2016-08-02 18:53:45 +00:00
bn_tests.txt Use BN_nnmod instead of BN_mod in BN_mod_exp_mont_consttime. 2016-08-02 20:24:58 +00:00
bn.c Ensure |BN_div| never gives negative zero in the no_branch code. 2016-08-02 18:53:45 +00:00
check_bn_tests.go Fix mixed comment markers. 2016-08-01 14:52:39 +00:00
CMakeLists.txt Calculate inverse in |BN_MONT_CTX_set| in constant time w.r.t. modulus. 2016-08-02 16:26:44 +00:00
cmp.c Add BN_rand_range_ex and use internally. 2016-07-29 16:09:26 +00:00
convert.c Check for errors in BN_bn2dec() 2016-08-16 19:46:35 +00:00
ctx.c Remove the func parameter to OPENSSL_PUT_ERROR. 2015-07-16 02:02:37 +00:00
div.c Fix BN_mod_word bug. 2016-06-09 19:05:31 +00:00
exponentiation.c Use BN_nnmod instead of BN_mod in BN_mod_exp_mont_consttime. 2016-08-02 20:24:58 +00:00
gcd.c Reset |out_no_inverse| before returning errors in BN_mod_inverse_odd. 2016-08-10 22:59:54 +00:00
generic.c Move |bn_div_words| to crypto/bn/div.c and make it static. 2016-02-25 16:16:14 +00:00
internal.h Calculate inverse in |BN_MONT_CTX_set| in constant time w.r.t. modulus. 2016-08-02 16:26:44 +00:00
kronecker.c Inital import. 2014-06-20 13:17:32 -07:00
montgomery_inv.c Calculate inverse in |BN_MONT_CTX_set| in constant time w.r.t. modulus. 2016-08-02 16:26:44 +00:00
montgomery.c Calculate inverse in |BN_MONT_CTX_set| in constant time w.r.t. modulus. 2016-08-02 16:26:44 +00:00
mul.c Make local functions static. 2016-03-20 16:37:58 +00:00
prime.c Handle BN_mod_word failures. 2016-06-23 21:25:18 +00:00
random.c Add BN_rand_range_ex and use internally. 2016-07-29 16:09:26 +00:00
rsaz_exp.c Use |alignas| for alignment. 2016-01-25 23:05:04 +00:00
rsaz_exp.h Fix license on rsaz_exp.h. 2015-07-27 22:21:11 +00:00
shift.c Remove the func parameter to OPENSSL_PUT_ERROR. 2015-07-16 02:02:37 +00:00
sqrt.c Document that BN_mod_sqrt assumes p is a prime. 2016-07-06 23:15:41 +00:00