diff options
author | deraadt <> | 2014-05-29 21:07:43 +0000 |
---|---|---|
committer | deraadt <> | 2014-05-29 21:07:43 +0000 |
commit | 3d662abca6b2a7f5bc9108b036434d61fcdb6e53 (patch) | |
tree | d5fe0c330801f3e72c7b588264c6027636db4330 /src/lib/libcrypto/ec | |
parent | d205a2aecb99564cccfbea61c39ebe3b0ddd7fb7 (diff) | |
download | openbsd-3d662abca6b2a7f5bc9108b036434d61fcdb6e53.tar.gz openbsd-3d662abca6b2a7f5bc9108b036434d61fcdb6e53.tar.bz2 openbsd-3d662abca6b2a7f5bc9108b036434d61fcdb6e53.zip |
convert 53 malloc(a*b) to reallocarray(NULL, a, b). that is 53
potential integer overflows easily changed into an allocation return
of NULL, with errno nicely set if need be. checks for an allocations
returning NULL are commonplace, or if the object is dereferenced
(quite normal) will result in a nice fault which can be detected &
repaired properly.
ok tedu
Diffstat (limited to 'src/lib/libcrypto/ec')
-rw-r--r-- | src/lib/libcrypto/ec/ec_mult.c | 14 | ||||
-rw-r--r-- | src/lib/libcrypto/ec/ecp_nistp224.c | 3 | ||||
-rw-r--r-- | src/lib/libcrypto/ec/ecp_nistp256.c | 7 | ||||
-rw-r--r-- | src/lib/libcrypto/ec/ecp_nistp521.c | 7 | ||||
-rw-r--r-- | src/lib/libcrypto/ec/ecp_smpl.c | 2 |
5 files changed, 20 insertions, 13 deletions
diff --git a/src/lib/libcrypto/ec/ec_mult.c b/src/lib/libcrypto/ec/ec_mult.c index c0525c4940..b3bd34d82d 100644 --- a/src/lib/libcrypto/ec/ec_mult.c +++ b/src/lib/libcrypto/ec/ec_mult.c | |||
@@ -425,11 +425,11 @@ 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 = malloc(totalnum * sizeof wsize[0]); | 428 | wsize = reallocarray(NULL, totalnum, sizeof wsize[0]); |
429 | wNAF_len = malloc(totalnum * sizeof wNAF_len[0]); | 429 | wNAF_len = reallocarray(NULL, totalnum, sizeof wNAF_len[0]); |
430 | wNAF = malloc((totalnum + 1) * sizeof wNAF[0]); /* includes space for | 430 | /* includes space for pivot */ |
431 | * pivot */ | 431 | wNAF = reallocarray(NULL, (totalnum + 1), sizeof wNAF[0]); |
432 | val_sub = malloc(totalnum * sizeof val_sub[0]); | 432 | val_sub = reallocarray(NULL, totalnum, sizeof val_sub[0]); |
433 | 433 | ||
434 | if (!wsize || !wNAF_len || !wNAF || !val_sub) { | 434 | if (!wsize || !wNAF_len || !wNAF || !val_sub) { |
435 | ECerr(EC_F_EC_WNAF_MUL, ERR_R_MALLOC_FAILURE); | 435 | ECerr(EC_F_EC_WNAF_MUL, ERR_R_MALLOC_FAILURE); |
@@ -573,7 +573,7 @@ ec_wNAF_mul(const EC_GROUP * group, EC_POINT * r, const BIGNUM * scalar, | |||
573 | * to a subarray of 'pre_comp->points' if we already have | 573 | * to a subarray of 'pre_comp->points' if we already have |
574 | * precomputation. | 574 | * precomputation. |
575 | */ | 575 | */ |
576 | val = malloc((num_val + 1) * sizeof val[0]); | 576 | val = reallocarray(NULL, (num_val + 1), sizeof val[0]); |
577 | if (val == NULL) { | 577 | if (val == NULL) { |
578 | ECerr(EC_F_EC_WNAF_MUL, ERR_R_MALLOC_FAILURE); | 578 | ECerr(EC_F_EC_WNAF_MUL, ERR_R_MALLOC_FAILURE); |
579 | goto err; | 579 | goto err; |
@@ -790,7 +790,7 @@ ec_wNAF_precompute_mult(EC_GROUP * group, BN_CTX * ctx) | |||
790 | num = pre_points_per_block * numblocks; /* number of points to | 790 | num = pre_points_per_block * numblocks; /* number of points to |
791 | * compute and store */ | 791 | * compute and store */ |
792 | 792 | ||
793 | points = malloc(sizeof(EC_POINT *) * (num + 1)); | 793 | points = reallocarray(NULL, sizeof(EC_POINT *), (num + 1)); |
794 | if (!points) { | 794 | if (!points) { |
795 | ECerr(EC_F_EC_WNAF_PRECOMPUTE_MULT, ERR_R_MALLOC_FAILURE); | 795 | ECerr(EC_F_EC_WNAF_PRECOMPUTE_MULT, ERR_R_MALLOC_FAILURE); |
796 | goto err; | 796 | goto err; |
diff --git a/src/lib/libcrypto/ec/ecp_nistp224.c b/src/lib/libcrypto/ec/ecp_nistp224.c index 53aced54d5..6e9b9fac3c 100644 --- a/src/lib/libcrypto/ec/ecp_nistp224.c +++ b/src/lib/libcrypto/ec/ecp_nistp224.c | |||
@@ -1438,7 +1438,8 @@ ec_GFp_nistp224_points_mul(const EC_GROUP * group, EC_POINT * r, | |||
1438 | secrets = calloc(num_points, sizeof(felem_bytearray)); | 1438 | secrets = calloc(num_points, sizeof(felem_bytearray)); |
1439 | pre_comp = calloc(num_points, 17 * 3 * sizeof(felem)); | 1439 | pre_comp = calloc(num_points, 17 * 3 * sizeof(felem)); |
1440 | if (mixed) | 1440 | if (mixed) |
1441 | tmp_felems = malloc((num_points * 17 + 1) * sizeof(felem)); | 1441 | tmp_felems = reallocarray(NULL, |
1442 | (num_points * 17 + 1), sizeof(felem)); | ||
1442 | if ((secrets == NULL) || (pre_comp == NULL) || (mixed && (tmp_felems == NULL))) { | 1443 | if ((secrets == NULL) || (pre_comp == NULL) || (mixed && (tmp_felems == NULL))) { |
1443 | ECerr(EC_F_EC_GFP_NISTP224_POINTS_MUL, ERR_R_MALLOC_FAILURE); | 1444 | ECerr(EC_F_EC_GFP_NISTP224_POINTS_MUL, ERR_R_MALLOC_FAILURE); |
1444 | goto err; | 1445 | goto err; |
diff --git a/src/lib/libcrypto/ec/ecp_nistp256.c b/src/lib/libcrypto/ec/ecp_nistp256.c index df80cc2b8a..b2398e106c 100644 --- a/src/lib/libcrypto/ec/ecp_nistp256.c +++ b/src/lib/libcrypto/ec/ecp_nistp256.c | |||
@@ -1987,8 +1987,11 @@ ec_GFp_nistp256_points_mul(const EC_GROUP * group, EC_POINT * r, | |||
1987 | } | 1987 | } |
1988 | secrets = calloc(num_points, sizeof(felem_bytearray)); | 1988 | secrets = calloc(num_points, sizeof(felem_bytearray)); |
1989 | pre_comp = calloc(num_points, 17 * 3 * sizeof(smallfelem)); | 1989 | pre_comp = calloc(num_points, 17 * 3 * sizeof(smallfelem)); |
1990 | if (mixed) | 1990 | if (mixed) { |
1991 | tmp_smallfelems = malloc((num_points * 17 + 1) * sizeof(smallfelem)); | 1991 | /* XXX should do more int overflow checking */ |
1992 | tmp_smallfelems = reallocarray(NULL, | ||
1993 | (num_points * 17 + 1), sizeof(smallfelem)); | ||
1994 | } | ||
1992 | if ((secrets == NULL) || (pre_comp == NULL) || (mixed && (tmp_smallfelems == NULL))) { | 1995 | if ((secrets == NULL) || (pre_comp == NULL) || (mixed && (tmp_smallfelems == NULL))) { |
1993 | ECerr(EC_F_EC_GFP_NISTP256_POINTS_MUL, ERR_R_MALLOC_FAILURE); | 1996 | ECerr(EC_F_EC_GFP_NISTP256_POINTS_MUL, ERR_R_MALLOC_FAILURE); |
1994 | goto err; | 1997 | goto err; |
diff --git a/src/lib/libcrypto/ec/ecp_nistp521.c b/src/lib/libcrypto/ec/ecp_nistp521.c index 6792c5b71d..083e017cdc 100644 --- a/src/lib/libcrypto/ec/ecp_nistp521.c +++ b/src/lib/libcrypto/ec/ecp_nistp521.c | |||
@@ -1874,8 +1874,11 @@ ec_GFp_nistp521_points_mul(const EC_GROUP * group, EC_POINT * r, | |||
1874 | } | 1874 | } |
1875 | secrets = calloc(num_points, sizeof(felem_bytearray)); | 1875 | secrets = calloc(num_points, sizeof(felem_bytearray)); |
1876 | pre_comp = calloc(num_points, 17 * 3 * sizeof(felem)); | 1876 | pre_comp = calloc(num_points, 17 * 3 * sizeof(felem)); |
1877 | if (mixed) | 1877 | if (mixed) { |
1878 | tmp_felems = malloc((num_points * 17 + 1) * sizeof(felem)); | 1878 | /* XXX should do more int overflow checking */ |
1879 | tmp_felems = reallocarray(NULL, | ||
1880 | (num_points * 17 + 1), sizeof(felem)); | ||
1881 | } | ||
1879 | if ((secrets == NULL) || (pre_comp == NULL) || (mixed && (tmp_felems == NULL))) { | 1882 | if ((secrets == NULL) || (pre_comp == NULL) || (mixed && (tmp_felems == NULL))) { |
1880 | ECerr(EC_F_EC_GFP_NISTP521_POINTS_MUL, ERR_R_MALLOC_FAILURE); | 1883 | ECerr(EC_F_EC_GFP_NISTP521_POINTS_MUL, ERR_R_MALLOC_FAILURE); |
1881 | goto err; | 1884 | goto err; |
diff --git a/src/lib/libcrypto/ec/ecp_smpl.c b/src/lib/libcrypto/ec/ecp_smpl.c index b87410120d..46783a47a8 100644 --- a/src/lib/libcrypto/ec/ecp_smpl.c +++ b/src/lib/libcrypto/ec/ecp_smpl.c | |||
@@ -1257,7 +1257,7 @@ ec_GFp_simple_points_make_affine(const EC_GROUP * group, size_t num, EC_POINT * | |||
1257 | */ | 1257 | */ |
1258 | pow2 <<= 1; | 1258 | pow2 <<= 1; |
1259 | 1259 | ||
1260 | heap = malloc(pow2 * sizeof heap[0]); | 1260 | heap = reallocarray(NULL, pow2, sizeof heap[0]); |
1261 | if (heap == NULL) | 1261 | if (heap == NULL) |
1262 | goto err; | 1262 | goto err; |
1263 | 1263 | ||