summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortb <>2022-08-31 09:38:00 +0000
committertb <>2022-08-31 09:38:00 +0000
commitf47bd0f92ad2e81e03a9c3a43690ff1dabc0755e (patch)
treec482a5a120451128fbb0aa6a9935144533c51ef0
parentd40e6544364add7eada09b249759cee72e0d2366 (diff)
downloadopenbsd-f47bd0f92ad2e81e03a9c3a43690ff1dabc0755e.tar.gz
openbsd-f47bd0f92ad2e81e03a9c3a43690ff1dabc0755e.tar.bz2
openbsd-f47bd0f92ad2e81e03a9c3a43690ff1dabc0755e.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.
-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,