summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormiod <>2015-02-15 08:44:35 +0000
committermiod <>2015-02-15 08:44:35 +0000
commit59c2aa4c8fcca1f139983d0a015c7ec6b8c6e0e2 (patch)
tree13797364656db3e3c63ac9fb0b1b16944e210ba3
parentee9535bf517cf372a14dd0af6721fbfaf4c74410 (diff)
downloadopenbsd-59c2aa4c8fcca1f139983d0a015c7ec6b8c6e0e2.tar.gz
openbsd-59c2aa4c8fcca1f139983d0a015c7ec6b8c6e0e2.tar.bz2
openbsd-59c2aa4c8fcca1f139983d0a015c7ec6b8c6e0e2.zip
In ec_wNAF_mul(), move the declaration of tmp_wNAF higher in scope, so that
all the function's exit paths can make sure it gets freed. Coverity CID 78861 tweaks & ok doug@ jsing@
-rw-r--r--src/lib/libcrypto/ec/ec_mult.c11
-rw-r--r--src/lib/libssl/src/crypto/ec/ec_mult.c11
2 files changed, 10 insertions, 12 deletions
diff --git a/src/lib/libcrypto/ec/ec_mult.c b/src/lib/libcrypto/ec/ec_mult.c
index e711413598..68f55cfcb3 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.17 2015/02/09 15:49:22 jsing Exp $ */ 1/* $OpenBSD: ec_mult.c,v 1.18 2015/02/15 08:44:35 miod 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 */
@@ -348,6 +348,7 @@ ec_wNAF_mul(const EC_GROUP * group, EC_POINT * r, const BIGNUM * scalar,
348 int r_is_at_infinity = 1; 348 int r_is_at_infinity = 1;
349 size_t *wsize = NULL; /* individual window sizes */ 349 size_t *wsize = NULL; /* individual window sizes */
350 signed char **wNAF = NULL; /* individual wNAFs */ 350 signed char **wNAF = NULL; /* individual wNAFs */
351 signed char *tmp_wNAF = NULL;
351 size_t *wNAF_len = NULL; 352 size_t *wNAF_len = NULL;
352 size_t max_len = 0; 353 size_t max_len = 0;
353 size_t num_val; 354 size_t num_val;
@@ -470,7 +471,6 @@ ec_wNAF_mul(const EC_GROUP * group, EC_POINT * r, const BIGNUM * scalar,
470 } 471 }
471 /* we have already generated a wNAF for 'scalar' */ 472 /* we have already generated a wNAF for 'scalar' */
472 } else { 473 } else {
473 signed char *tmp_wNAF = NULL;
474 size_t tmp_len = 0; 474 size_t tmp_len = 0;
475 475
476 if (num_scalar != 0) { 476 if (num_scalar != 0) {
@@ -483,7 +483,7 @@ ec_wNAF_mul(const EC_GROUP * group, EC_POINT * r, const BIGNUM * scalar,
483 */ 483 */
484 wsize[num] = pre_comp->w; 484 wsize[num] = pre_comp->w;
485 tmp_wNAF = compute_wNAF(scalar, wsize[num], &tmp_len); 485 tmp_wNAF = compute_wNAF(scalar, wsize[num], &tmp_len);
486 if (!tmp_wNAF) 486 if (tmp_wNAF == NULL)
487 goto err; 487 goto err;
488 488
489 if (tmp_len <= max_len) { 489 if (tmp_len <= max_len) {
@@ -497,6 +497,7 @@ ec_wNAF_mul(const EC_GROUP * group, EC_POINT * r, const BIGNUM * scalar,
497 totalnum = num + 1; /* don't use wNAF 497 totalnum = num + 1; /* don't use wNAF
498 * splitting */ 498 * splitting */
499 wNAF[num] = tmp_wNAF; 499 wNAF[num] = tmp_wNAF;
500 tmp_wNAF = NULL;
500 wNAF[num + 1] = NULL; 501 wNAF[num + 1] = NULL;
501 wNAF_len[num] = tmp_len; 502 wNAF_len[num] = tmp_len;
502 if (tmp_len > max_len) 503 if (tmp_len > max_len)
@@ -553,7 +554,6 @@ ec_wNAF_mul(const EC_GROUP * group, EC_POINT * r, const BIGNUM * scalar,
553 wNAF[i] = malloc(wNAF_len[i]); 554 wNAF[i] = malloc(wNAF_len[i]);
554 if (wNAF[i] == NULL) { 555 if (wNAF[i] == NULL) {
555 ECerr(EC_F_EC_WNAF_MUL, ERR_R_MALLOC_FAILURE); 556 ECerr(EC_F_EC_WNAF_MUL, ERR_R_MALLOC_FAILURE);
556 free(tmp_wNAF);
557 goto err; 557 goto err;
558 } 558 }
559 memcpy(wNAF[i], pp, wNAF_len[i]); 559 memcpy(wNAF[i], pp, wNAF_len[i]);
@@ -562,14 +562,12 @@ ec_wNAF_mul(const EC_GROUP * group, EC_POINT * r, const BIGNUM * scalar,
562 562
563 if (*tmp_points == NULL) { 563 if (*tmp_points == NULL) {
564 ECerr(EC_F_EC_WNAF_MUL, ERR_R_INTERNAL_ERROR); 564 ECerr(EC_F_EC_WNAF_MUL, ERR_R_INTERNAL_ERROR);
565 free(tmp_wNAF);
566 goto err; 565 goto err;
567 } 566 }
568 val_sub[i] = tmp_points; 567 val_sub[i] = tmp_points;
569 tmp_points += pre_points_per_block; 568 tmp_points += pre_points_per_block;
570 pp += blocksize; 569 pp += blocksize;
571 } 570 }
572 free(tmp_wNAF);
573 } 571 }
574 } 572 }
575 } 573 }
@@ -686,6 +684,7 @@ err:
686 EC_POINT_free(tmp); 684 EC_POINT_free(tmp);
687 free(wsize); 685 free(wsize);
688 free(wNAF_len); 686 free(wNAF_len);
687 free(tmp_wNAF);
689 if (wNAF != NULL) { 688 if (wNAF != NULL) {
690 signed char **w; 689 signed char **w;
691 690
diff --git a/src/lib/libssl/src/crypto/ec/ec_mult.c b/src/lib/libssl/src/crypto/ec/ec_mult.c
index e711413598..68f55cfcb3 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.17 2015/02/09 15:49:22 jsing Exp $ */ 1/* $OpenBSD: ec_mult.c,v 1.18 2015/02/15 08:44:35 miod 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 */
@@ -348,6 +348,7 @@ ec_wNAF_mul(const EC_GROUP * group, EC_POINT * r, const BIGNUM * scalar,
348 int r_is_at_infinity = 1; 348 int r_is_at_infinity = 1;
349 size_t *wsize = NULL; /* individual window sizes */ 349 size_t *wsize = NULL; /* individual window sizes */
350 signed char **wNAF = NULL; /* individual wNAFs */ 350 signed char **wNAF = NULL; /* individual wNAFs */
351 signed char *tmp_wNAF = NULL;
351 size_t *wNAF_len = NULL; 352 size_t *wNAF_len = NULL;
352 size_t max_len = 0; 353 size_t max_len = 0;
353 size_t num_val; 354 size_t num_val;
@@ -470,7 +471,6 @@ ec_wNAF_mul(const EC_GROUP * group, EC_POINT * r, const BIGNUM * scalar,
470 } 471 }
471 /* we have already generated a wNAF for 'scalar' */ 472 /* we have already generated a wNAF for 'scalar' */
472 } else { 473 } else {
473 signed char *tmp_wNAF = NULL;
474 size_t tmp_len = 0; 474 size_t tmp_len = 0;
475 475
476 if (num_scalar != 0) { 476 if (num_scalar != 0) {
@@ -483,7 +483,7 @@ ec_wNAF_mul(const EC_GROUP * group, EC_POINT * r, const BIGNUM * scalar,
483 */ 483 */
484 wsize[num] = pre_comp->w; 484 wsize[num] = pre_comp->w;
485 tmp_wNAF = compute_wNAF(scalar, wsize[num], &tmp_len); 485 tmp_wNAF = compute_wNAF(scalar, wsize[num], &tmp_len);
486 if (!tmp_wNAF) 486 if (tmp_wNAF == NULL)
487 goto err; 487 goto err;
488 488
489 if (tmp_len <= max_len) { 489 if (tmp_len <= max_len) {
@@ -497,6 +497,7 @@ ec_wNAF_mul(const EC_GROUP * group, EC_POINT * r, const BIGNUM * scalar,
497 totalnum = num + 1; /* don't use wNAF 497 totalnum = num + 1; /* don't use wNAF
498 * splitting */ 498 * splitting */
499 wNAF[num] = tmp_wNAF; 499 wNAF[num] = tmp_wNAF;
500 tmp_wNAF = NULL;
500 wNAF[num + 1] = NULL; 501 wNAF[num + 1] = NULL;
501 wNAF_len[num] = tmp_len; 502 wNAF_len[num] = tmp_len;
502 if (tmp_len > max_len) 503 if (tmp_len > max_len)
@@ -553,7 +554,6 @@ ec_wNAF_mul(const EC_GROUP * group, EC_POINT * r, const BIGNUM * scalar,
553 wNAF[i] = malloc(wNAF_len[i]); 554 wNAF[i] = malloc(wNAF_len[i]);
554 if (wNAF[i] == NULL) { 555 if (wNAF[i] == NULL) {
555 ECerr(EC_F_EC_WNAF_MUL, ERR_R_MALLOC_FAILURE); 556 ECerr(EC_F_EC_WNAF_MUL, ERR_R_MALLOC_FAILURE);
556 free(tmp_wNAF);
557 goto err; 557 goto err;
558 } 558 }
559 memcpy(wNAF[i], pp, wNAF_len[i]); 559 memcpy(wNAF[i], pp, wNAF_len[i]);
@@ -562,14 +562,12 @@ ec_wNAF_mul(const EC_GROUP * group, EC_POINT * r, const BIGNUM * scalar,
562 562
563 if (*tmp_points == NULL) { 563 if (*tmp_points == NULL) {
564 ECerr(EC_F_EC_WNAF_MUL, ERR_R_INTERNAL_ERROR); 564 ECerr(EC_F_EC_WNAF_MUL, ERR_R_INTERNAL_ERROR);
565 free(tmp_wNAF);
566 goto err; 565 goto err;
567 } 566 }
568 val_sub[i] = tmp_points; 567 val_sub[i] = tmp_points;
569 tmp_points += pre_points_per_block; 568 tmp_points += pre_points_per_block;
570 pp += blocksize; 569 pp += blocksize;
571 } 570 }
572 free(tmp_wNAF);
573 } 571 }
574 } 572 }
575 } 573 }
@@ -686,6 +684,7 @@ err:
686 EC_POINT_free(tmp); 684 EC_POINT_free(tmp);
687 free(wsize); 685 free(wsize);
688 free(wNAF_len); 686 free(wNAF_len);
687 free(tmp_wNAF);
689 if (wNAF != NULL) { 688 if (wNAF != NULL) {
690 signed char **w; 689 signed char **w;
691 690