summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormiod <>2015-07-15 17:41:56 +0000
committermiod <>2015-07-15 17:41:56 +0000
commit27eb6bc04fb78763e85062ff59f306d666290253 (patch)
tree68a348f754c211a1512b05ddfa28be629cbeb5ac /src
parentd831c78b3e48383635e9bfa30710637001e9782d (diff)
downloadopenbsd-27eb6bc04fb78763e85062ff59f306d666290253.tar.gz
openbsd-27eb6bc04fb78763e85062ff59f306d666290253.tar.bz2
openbsd-27eb6bc04fb78763e85062ff59f306d666290253.zip
Fix two theoretical NULL pointer dereferences which can only happen if you
have seriously corrupted your memory; Coverity CID 21708 and 21721. While there, plug a memory leak upon error in x509_name_canon(). ok bcook@ beck@
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/asn1/x_name.c13
-rw-r--r--src/lib/libssl/src/crypto/asn1/x_name.c13
2 files changed, 18 insertions, 8 deletions
diff --git a/src/lib/libcrypto/asn1/x_name.c b/src/lib/libcrypto/asn1/x_name.c
index 51c5a0ae41..569c6fe346 100644
--- a/src/lib/libcrypto/asn1/x_name.c
+++ b/src/lib/libcrypto/asn1/x_name.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: x_name.c,v 1.29 2015/02/14 15:29:29 miod Exp $ */ 1/* $OpenBSD: x_name.c,v 1.30 2015/07/15 17:41:56 miod Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -377,7 +377,8 @@ x509_name_encode(X509_NAME *a)
377 goto memerr; 377 goto memerr;
378 set = entry->set; 378 set = entry->set;
379 } 379 }
380 if (!sk_X509_NAME_ENTRY_push(entries, entry)) 380 if (entries == NULL /* if entry->set is bogusly -1 */ ||
381 !sk_X509_NAME_ENTRY_push(entries, entry))
381 goto memerr; 382 goto memerr;
382 } 383 }
383 len = ASN1_item_ex_i2d(&intname.a, NULL, 384 len = ASN1_item_ex_i2d(&intname.a, NULL,
@@ -449,8 +450,11 @@ x509_name_canon(X509_NAME *a)
449 entries = sk_X509_NAME_ENTRY_new_null(); 450 entries = sk_X509_NAME_ENTRY_new_null();
450 if (!entries) 451 if (!entries)
451 goto err; 452 goto err;
452 if (!sk_STACK_OF_X509_NAME_ENTRY_push(intname, entries)) 453 if (sk_STACK_OF_X509_NAME_ENTRY_push(intname,
454 entries) == 0) {
455 sk_X509_NAME_ENTRY_free(entries);
453 goto err; 456 goto err;
457 }
454 set = entry->set; 458 set = entry->set;
455 } 459 }
456 tmpentry = X509_NAME_ENTRY_new(); 460 tmpentry = X509_NAME_ENTRY_new();
@@ -461,7 +465,8 @@ x509_name_canon(X509_NAME *a)
461 goto err; 465 goto err;
462 if (!asn1_string_canon(tmpentry->value, entry->value)) 466 if (!asn1_string_canon(tmpentry->value, entry->value))
463 goto err; 467 goto err;
464 if (!sk_X509_NAME_ENTRY_push(entries, tmpentry)) 468 if (entries == NULL /* if entry->set is bogusly -1 */ ||
469 !sk_X509_NAME_ENTRY_push(entries, tmpentry))
465 goto err; 470 goto err;
466 tmpentry = NULL; 471 tmpentry = NULL;
467 } 472 }
diff --git a/src/lib/libssl/src/crypto/asn1/x_name.c b/src/lib/libssl/src/crypto/asn1/x_name.c
index 51c5a0ae41..569c6fe346 100644
--- a/src/lib/libssl/src/crypto/asn1/x_name.c
+++ b/src/lib/libssl/src/crypto/asn1/x_name.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: x_name.c,v 1.29 2015/02/14 15:29:29 miod Exp $ */ 1/* $OpenBSD: x_name.c,v 1.30 2015/07/15 17:41:56 miod Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -377,7 +377,8 @@ x509_name_encode(X509_NAME *a)
377 goto memerr; 377 goto memerr;
378 set = entry->set; 378 set = entry->set;
379 } 379 }
380 if (!sk_X509_NAME_ENTRY_push(entries, entry)) 380 if (entries == NULL /* if entry->set is bogusly -1 */ ||
381 !sk_X509_NAME_ENTRY_push(entries, entry))
381 goto memerr; 382 goto memerr;
382 } 383 }
383 len = ASN1_item_ex_i2d(&intname.a, NULL, 384 len = ASN1_item_ex_i2d(&intname.a, NULL,
@@ -449,8 +450,11 @@ x509_name_canon(X509_NAME *a)
449 entries = sk_X509_NAME_ENTRY_new_null(); 450 entries = sk_X509_NAME_ENTRY_new_null();
450 if (!entries) 451 if (!entries)
451 goto err; 452 goto err;
452 if (!sk_STACK_OF_X509_NAME_ENTRY_push(intname, entries)) 453 if (sk_STACK_OF_X509_NAME_ENTRY_push(intname,
454 entries) == 0) {
455 sk_X509_NAME_ENTRY_free(entries);
453 goto err; 456 goto err;
457 }
454 set = entry->set; 458 set = entry->set;
455 } 459 }
456 tmpentry = X509_NAME_ENTRY_new(); 460 tmpentry = X509_NAME_ENTRY_new();
@@ -461,7 +465,8 @@ x509_name_canon(X509_NAME *a)
461 goto err; 465 goto err;
462 if (!asn1_string_canon(tmpentry->value, entry->value)) 466 if (!asn1_string_canon(tmpentry->value, entry->value))
463 goto err; 467 goto err;
464 if (!sk_X509_NAME_ENTRY_push(entries, tmpentry)) 468 if (entries == NULL /* if entry->set is bogusly -1 */ ||
469 !sk_X509_NAME_ENTRY_push(entries, tmpentry))
465 goto err; 470 goto err;
466 tmpentry = NULL; 471 tmpentry = NULL;
467 } 472 }