summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortb <>2022-08-31 09:38:00 +0000
committertb <>2022-08-31 09:38:00 +0000
commit56edcd3374149e6c27331d45ead6cc4c1203ebfd (patch)
treec482a5a120451128fbb0aa6a9935144533c51ef0 /src
parent2ea7b919ed36546cd8ec29340a05dbda20a563cd (diff)
downloadopenbsd-56edcd3374149e6c27331d45ead6cc4c1203ebfd.tar.gz
openbsd-56edcd3374149e6c27331d45ead6cc4c1203ebfd.tar.bz2
openbsd-56edcd3374149e6c27331d45ead6cc4c1203ebfd.zip
Avoid some buffer overflows in ecdsatest
The ASN.1 encoding of the modified ECDSA signature can grow in size due to padding of the ASN.1 integers. Instead of reusing the same signature buffer freshly allocate it. Avoids some buffer overflows caught by ASAN.
Diffstat (limited to 'src')
-rw-r--r--src/regress/lib/libcrypto/ecdsa/ecdsatest.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/regress/lib/libcrypto/ecdsa/ecdsatest.c b/src/regress/lib/libcrypto/ecdsa/ecdsatest.c
index 45ffd91ab4..6cbe345d08 100644
--- a/src/regress/lib/libcrypto/ecdsa/ecdsatest.c
+++ b/src/regress/lib/libcrypto/ecdsa/ecdsatest.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ecdsatest.c,v 1.11 2022/08/31 09:36:46 tb Exp $ */ 1/* $OpenBSD: ecdsatest.c,v 1.12 2022/08/31 09:38:00 tb Exp $ */
2/* 2/*
3 * Written by Nils Larsch for the OpenSSL project. 3 * Written by Nils Larsch for the OpenSSL project.
4 */ 4 */
@@ -251,7 +251,8 @@ test_builtin(BIO *out)
251 BIO_printf(out, "."); 251 BIO_printf(out, ".");
252 (void)BIO_flush(out); 252 (void)BIO_flush(out);
253 /* create signature */ 253 /* create signature */
254 sig_len = ECDSA_size(eckey); 254 if ((sig_len = ECDSA_size(eckey)) == 0)
255 goto builtin_err;
255 if ((signature = malloc(sig_len)) == NULL) 256 if ((signature = malloc(sig_len)) == NULL)
256 goto builtin_err; 257 goto builtin_err;
257 if (!ECDSA_sign(0, digest, 20, signature, &sig_len, eckey)) { 258 if (!ECDSA_sign(0, digest, 20, signature, &sig_len, eckey)) {
@@ -332,6 +333,12 @@ test_builtin(BIO *out)
332 r = NULL; 333 r = NULL;
333 s = NULL; 334 s = NULL;
334 335
336 if ((sig_len = i2d_ECDSA_SIG(ecdsa_sig, NULL)) <= 0)
337 goto builtin_err;
338 free(signature);
339 if ((signature = calloc(1, sig_len)) == NULL)
340 goto builtin_err;
341
335 sig_ptr2 = signature; 342 sig_ptr2 = signature;
336 sig_len = i2d_ECDSA_SIG(ecdsa_sig, &sig_ptr2); 343 sig_len = i2d_ECDSA_SIG(ecdsa_sig, &sig_ptr2);
337 if (ECDSA_verify(0, digest, 20, signature, sig_len, 344 if (ECDSA_verify(0, digest, 20, signature, sig_len,
@@ -349,6 +356,12 @@ test_builtin(BIO *out)
349 r = NULL; 356 r = NULL;
350 s = NULL; 357 s = NULL;
351 358
359 if ((sig_len = i2d_ECDSA_SIG(ecdsa_sig, NULL)) <= 0)
360 goto builtin_err;
361 free(signature);
362 if ((signature = calloc(1, sig_len)) == NULL)
363 goto builtin_err;
364
352 sig_ptr2 = signature; 365 sig_ptr2 = signature;
353 sig_len = i2d_ECDSA_SIG(ecdsa_sig, &sig_ptr2); 366 sig_len = i2d_ECDSA_SIG(ecdsa_sig, &sig_ptr2);
354 if (ECDSA_verify(0, digest, 20, signature, sig_len, 367 if (ECDSA_verify(0, digest, 20, signature, sig_len,