summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorguenther <>2014-11-11 06:23:43 +0000
committerguenther <>2014-11-11 06:23:43 +0000
commit3a7fef712ff3b788a0da6afb3334dcb656b65b8b (patch)
tree1fce968bf2e236d305e4c29f40a302a0f0ba4856
parent41965c3e751d43c1dda72f45741ae75ba089cd4e (diff)
downloadopenbsd-3a7fef712ff3b788a0da6afb3334dcb656b65b8b.tar.gz
openbsd-3a7fef712ff3b788a0da6afb3334dcb656b65b8b.tar.bz2
openbsd-3a7fef712ff3b788a0da6afb3334dcb656b65b8b.zip
Don't free garbage in ec_wNAF_mul() if wNAF could be allocated but
other allocations in the same block couldn't. problem pointed out by David Ramos on the openssl-dev list ok miod@ doug@
-rw-r--r--src/lib/libcrypto/ec/ec_mult.c16
-rw-r--r--src/lib/libssl/src/crypto/ec/ec_mult.c16
2 files changed, 22 insertions, 10 deletions
diff --git a/src/lib/libcrypto/ec/ec_mult.c b/src/lib/libcrypto/ec/ec_mult.c
index 4e49ce4f7b..3dc17bc409 100644
--- a/src/lib/libcrypto/ec/ec_mult.c
+++ b/src/lib/libcrypto/ec/ec_mult.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ec_mult.c,v 1.14 2014/07/12 16:03:37 miod Exp $ */ 1/* $OpenBSD: ec_mult.c,v 1.15 2014/11/11 06:23:43 guenther Exp $ */
2/* 2/*
3 * Originally written by Bodo Moeller and Nils Larsch for the OpenSSL project. 3 * Originally written by Bodo Moeller and Nils Larsch for the OpenSSL project.
4 */ 4 */
@@ -425,17 +425,23 @@ ec_wNAF_mul(const EC_GROUP * group, EC_POINT * r, const BIGNUM * scalar,
425 } 425 }
426 totalnum = num + numblocks; 426 totalnum = num + numblocks;
427 427
428 wsize = reallocarray(NULL, totalnum, sizeof wsize[0]);
429 wNAF_len = reallocarray(NULL, totalnum, sizeof wNAF_len[0]);
430 /* includes space for pivot */ 428 /* includes space for pivot */
431 wNAF = reallocarray(NULL, (totalnum + 1), sizeof wNAF[0]); 429 wNAF = reallocarray(NULL, (totalnum + 1), sizeof wNAF[0]);
430 if (wNAF == NULL) {
431 ECerr(EC_F_EC_WNAF_MUL, ERR_R_MALLOC_FAILURE);
432 goto err;
433 }
434
435 wNAF[0] = NULL; /* preliminary pivot */
436
437 wsize = reallocarray(NULL, totalnum, sizeof wsize[0]);
438 wNAF_len = reallocarray(NULL, totalnum, sizeof wNAF_len[0]);
432 val_sub = reallocarray(NULL, totalnum, sizeof val_sub[0]); 439 val_sub = reallocarray(NULL, totalnum, sizeof val_sub[0]);
433 440
434 if (!wsize || !wNAF_len || !wNAF || !val_sub) { 441 if (wsize == NULL || wNAF_len == NULL || val_sub == NULL) {
435 ECerr(EC_F_EC_WNAF_MUL, ERR_R_MALLOC_FAILURE); 442 ECerr(EC_F_EC_WNAF_MUL, ERR_R_MALLOC_FAILURE);
436 goto err; 443 goto err;
437 } 444 }
438 wNAF[0] = NULL; /* preliminary pivot */
439 445
440 /* num_val will be the total number of temporarily precomputed points */ 446 /* num_val will be the total number of temporarily precomputed points */
441 num_val = 0; 447 num_val = 0;
diff --git a/src/lib/libssl/src/crypto/ec/ec_mult.c b/src/lib/libssl/src/crypto/ec/ec_mult.c
index 4e49ce4f7b..3dc17bc409 100644
--- a/src/lib/libssl/src/crypto/ec/ec_mult.c
+++ b/src/lib/libssl/src/crypto/ec/ec_mult.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ec_mult.c,v 1.14 2014/07/12 16:03:37 miod Exp $ */ 1/* $OpenBSD: ec_mult.c,v 1.15 2014/11/11 06:23:43 guenther Exp $ */
2/* 2/*
3 * Originally written by Bodo Moeller and Nils Larsch for the OpenSSL project. 3 * Originally written by Bodo Moeller and Nils Larsch for the OpenSSL project.
4 */ 4 */
@@ -425,17 +425,23 @@ ec_wNAF_mul(const EC_GROUP * group, EC_POINT * r, const BIGNUM * scalar,
425 } 425 }
426 totalnum = num + numblocks; 426 totalnum = num + numblocks;
427 427
428 wsize = reallocarray(NULL, totalnum, sizeof wsize[0]);
429 wNAF_len = reallocarray(NULL, totalnum, sizeof wNAF_len[0]);
430 /* includes space for pivot */ 428 /* includes space for pivot */
431 wNAF = reallocarray(NULL, (totalnum + 1), sizeof wNAF[0]); 429 wNAF = reallocarray(NULL, (totalnum + 1), sizeof wNAF[0]);
430 if (wNAF == NULL) {
431 ECerr(EC_F_EC_WNAF_MUL, ERR_R_MALLOC_FAILURE);
432 goto err;
433 }
434
435 wNAF[0] = NULL; /* preliminary pivot */
436
437 wsize = reallocarray(NULL, totalnum, sizeof wsize[0]);
438 wNAF_len = reallocarray(NULL, totalnum, sizeof wNAF_len[0]);
432 val_sub = reallocarray(NULL, totalnum, sizeof val_sub[0]); 439 val_sub = reallocarray(NULL, totalnum, sizeof val_sub[0]);
433 440
434 if (!wsize || !wNAF_len || !wNAF || !val_sub) { 441 if (wsize == NULL || wNAF_len == NULL || val_sub == NULL) {
435 ECerr(EC_F_EC_WNAF_MUL, ERR_R_MALLOC_FAILURE); 442 ECerr(EC_F_EC_WNAF_MUL, ERR_R_MALLOC_FAILURE);
436 goto err; 443 goto err;
437 } 444 }
438 wNAF[0] = NULL; /* preliminary pivot */
439 445
440 /* num_val will be the total number of temporarily precomputed points */ 446 /* num_val will be the total number of temporarily precomputed points */
441 num_val = 0; 447 num_val = 0;