diff options
| author | miod <> | 2015-02-14 15:28:39 +0000 |
|---|---|---|
| committer | miod <> | 2015-02-14 15:28:39 +0000 |
| commit | d98b5f994165f8ff65ddac1b292a91d761fcef3f (patch) | |
| tree | 5ed83fbf4241c53107d2a0b83a8e7183a6d65aa5 | |
| parent | 586e84e311f9a1dcd4a33f6adb9ddcd1bd80a523 (diff) | |
| download | openbsd-d98b5f994165f8ff65ddac1b292a91d761fcef3f.tar.gz openbsd-d98b5f994165f8ff65ddac1b292a91d761fcef3f.tar.bz2 openbsd-d98b5f994165f8ff65ddac1b292a91d761fcef3f.zip | |
Memory leak upon error in X509_add1_{trust,reject}_object.
ok doug@
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libcrypto/asn1/x_x509a.c | 30 | ||||
| -rw-r--r-- | src/lib/libssl/src/crypto/asn1/x_x509a.c | 30 |
2 files changed, 46 insertions, 14 deletions
diff --git a/src/lib/libcrypto/asn1/x_x509a.c b/src/lib/libcrypto/asn1/x_x509a.c index c0624d674b..29817915b6 100644 --- a/src/lib/libcrypto/asn1/x_x509a.c +++ b/src/lib/libcrypto/asn1/x_x509a.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: x_x509a.c,v 1.13 2015/02/11 04:00:39 jsing Exp $ */ | 1 | /* $OpenBSD: x_x509a.c,v 1.14 2015/02/14 15:28:39 miod Exp $ */ |
| 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 | * project 1999. | 3 | * project 1999. |
| 4 | */ | 4 | */ |
| @@ -214,13 +214,21 @@ X509_add1_trust_object(X509 *x, ASN1_OBJECT *obj) | |||
| 214 | { | 214 | { |
| 215 | X509_CERT_AUX *aux; | 215 | X509_CERT_AUX *aux; |
| 216 | ASN1_OBJECT *objtmp; | 216 | ASN1_OBJECT *objtmp; |
| 217 | int rc; | ||
| 218 | |||
| 217 | if (!(objtmp = OBJ_dup(obj))) | 219 | if (!(objtmp = OBJ_dup(obj))) |
| 218 | return 0; | 220 | return 0; |
| 219 | if (!(aux = aux_get(x))) | 221 | if (!(aux = aux_get(x))) |
| 220 | return 0; | 222 | goto err; |
| 221 | if (!aux->trust && !(aux->trust = sk_ASN1_OBJECT_new_null())) | 223 | if (!aux->trust && !(aux->trust = sk_ASN1_OBJECT_new_null())) |
| 222 | return 0; | 224 | goto err; |
| 223 | return sk_ASN1_OBJECT_push(aux->trust, objtmp); | 225 | rc = sk_ASN1_OBJECT_push(aux->trust, objtmp); |
| 226 | if (rc != 0) | ||
| 227 | return rc; | ||
| 228 | |||
| 229 | err: | ||
| 230 | ASN1_OBJECT_free(objtmp); | ||
| 231 | return 0; | ||
| 224 | } | 232 | } |
| 225 | 233 | ||
| 226 | int | 234 | int |
| @@ -228,13 +236,21 @@ X509_add1_reject_object(X509 *x, ASN1_OBJECT *obj) | |||
| 228 | { | 236 | { |
| 229 | X509_CERT_AUX *aux; | 237 | X509_CERT_AUX *aux; |
| 230 | ASN1_OBJECT *objtmp; | 238 | ASN1_OBJECT *objtmp; |
| 239 | int rc; | ||
| 240 | |||
| 231 | if (!(objtmp = OBJ_dup(obj))) | 241 | if (!(objtmp = OBJ_dup(obj))) |
| 232 | return 0; | 242 | return 0; |
| 233 | if (!(aux = aux_get(x))) | 243 | if (!(aux = aux_get(x))) |
| 234 | return 0; | 244 | goto err; |
| 235 | if (!aux->reject && !(aux->reject = sk_ASN1_OBJECT_new_null())) | 245 | if (!aux->reject && !(aux->reject = sk_ASN1_OBJECT_new_null())) |
| 236 | return 0; | 246 | goto err; |
| 237 | return sk_ASN1_OBJECT_push(aux->reject, objtmp); | 247 | rc = sk_ASN1_OBJECT_push(aux->reject, objtmp); |
| 248 | if (rc != 0) | ||
| 249 | return rc; | ||
| 250 | |||
| 251 | err: | ||
| 252 | ASN1_OBJECT_free(objtmp); | ||
| 253 | return 0; | ||
| 238 | } | 254 | } |
| 239 | 255 | ||
| 240 | void | 256 | void |
diff --git a/src/lib/libssl/src/crypto/asn1/x_x509a.c b/src/lib/libssl/src/crypto/asn1/x_x509a.c index c0624d674b..29817915b6 100644 --- a/src/lib/libssl/src/crypto/asn1/x_x509a.c +++ b/src/lib/libssl/src/crypto/asn1/x_x509a.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: x_x509a.c,v 1.13 2015/02/11 04:00:39 jsing Exp $ */ | 1 | /* $OpenBSD: x_x509a.c,v 1.14 2015/02/14 15:28:39 miod Exp $ */ |
| 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 | * project 1999. | 3 | * project 1999. |
| 4 | */ | 4 | */ |
| @@ -214,13 +214,21 @@ X509_add1_trust_object(X509 *x, ASN1_OBJECT *obj) | |||
| 214 | { | 214 | { |
| 215 | X509_CERT_AUX *aux; | 215 | X509_CERT_AUX *aux; |
| 216 | ASN1_OBJECT *objtmp; | 216 | ASN1_OBJECT *objtmp; |
| 217 | int rc; | ||
| 218 | |||
| 217 | if (!(objtmp = OBJ_dup(obj))) | 219 | if (!(objtmp = OBJ_dup(obj))) |
| 218 | return 0; | 220 | return 0; |
| 219 | if (!(aux = aux_get(x))) | 221 | if (!(aux = aux_get(x))) |
| 220 | return 0; | 222 | goto err; |
| 221 | if (!aux->trust && !(aux->trust = sk_ASN1_OBJECT_new_null())) | 223 | if (!aux->trust && !(aux->trust = sk_ASN1_OBJECT_new_null())) |
| 222 | return 0; | 224 | goto err; |
| 223 | return sk_ASN1_OBJECT_push(aux->trust, objtmp); | 225 | rc = sk_ASN1_OBJECT_push(aux->trust, objtmp); |
| 226 | if (rc != 0) | ||
| 227 | return rc; | ||
| 228 | |||
| 229 | err: | ||
| 230 | ASN1_OBJECT_free(objtmp); | ||
| 231 | return 0; | ||
| 224 | } | 232 | } |
| 225 | 233 | ||
| 226 | int | 234 | int |
| @@ -228,13 +236,21 @@ X509_add1_reject_object(X509 *x, ASN1_OBJECT *obj) | |||
| 228 | { | 236 | { |
| 229 | X509_CERT_AUX *aux; | 237 | X509_CERT_AUX *aux; |
| 230 | ASN1_OBJECT *objtmp; | 238 | ASN1_OBJECT *objtmp; |
| 239 | int rc; | ||
| 240 | |||
| 231 | if (!(objtmp = OBJ_dup(obj))) | 241 | if (!(objtmp = OBJ_dup(obj))) |
| 232 | return 0; | 242 | return 0; |
| 233 | if (!(aux = aux_get(x))) | 243 | if (!(aux = aux_get(x))) |
| 234 | return 0; | 244 | goto err; |
| 235 | if (!aux->reject && !(aux->reject = sk_ASN1_OBJECT_new_null())) | 245 | if (!aux->reject && !(aux->reject = sk_ASN1_OBJECT_new_null())) |
| 236 | return 0; | 246 | goto err; |
| 237 | return sk_ASN1_OBJECT_push(aux->reject, objtmp); | 247 | rc = sk_ASN1_OBJECT_push(aux->reject, objtmp); |
| 248 | if (rc != 0) | ||
| 249 | return rc; | ||
| 250 | |||
| 251 | err: | ||
| 252 | ASN1_OBJECT_free(objtmp); | ||
| 253 | return 0; | ||
| 238 | } | 254 | } |
| 239 | 255 | ||
| 240 | void | 256 | void |
