diff options
author | David Benjamin <davidben@chromium.org> | 2014-08-06 06:22:49 +0400 |
---|---|---|
committer | Adam Langley <agl@google.com> | 2014-08-07 04:06:34 +0400 |
commit | 150c617cfce408faf1274a60e5db194595cb4473 (patch) | |
tree | 35dc71d4a4f1afe75561befbb1543470f96ed514 /crypto/x509 | |
parent | e6e15fc3a19ac6e4317d7245df24313c261fc2bb (diff) |
Add X509_up_ref and use it internally.
Avoid needing to manually increment the reference count and using the right
lock, both here and in Chromium.
Change-Id: If116ebc224cfb1c4711f7e2c06f1fd2c97af21dd
Reviewed-on: https://boringssl-review.googlesource.com/1415
Reviewed-by: Adam Langley <agl@google.com>
Diffstat (limited to 'crypto/x509')
-rw-r--r-- | crypto/x509/x509_cmp.c | 3 | ||||
-rw-r--r-- | crypto/x509/x509_lu.c | 5 | ||||
-rw-r--r-- | crypto/x509/x509_vfy.c | 6 | ||||
-rw-r--r-- | crypto/x509/x_x509.c | 6 |
4 files changed, 12 insertions, 8 deletions
diff --git a/crypto/x509/x509_cmp.c b/crypto/x509/x509_cmp.c index e626fcf6..57e6167e 100644 --- a/crypto/x509/x509_cmp.c +++ b/crypto/x509/x509_cmp.c @@ -508,8 +508,7 @@ STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain) ret = sk_X509_dup(chain); for (i = 0; i < sk_X509_num(ret); i++) { - X509 *x = sk_X509_value(ret, i); - CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509); + X509_up_ref(sk_X509_value(ret, i)); } return ret; } diff --git a/crypto/x509/x509_lu.c b/crypto/x509/x509_lu.c index 63b81c37..05d15985 100644 --- a/crypto/x509/x509_lu.c +++ b/crypto/x509/x509_lu.c @@ -413,7 +413,7 @@ void X509_OBJECT_up_ref_count(X509_OBJECT *a) switch (a->type) { case X509_LU_X509: - CRYPTO_add(&a->data.x509->references,1,CRYPTO_LOCK_X509); + X509_up_ref(a->data.x509); break; case X509_LU_CRL: CRYPTO_add(&a->data.crl->references,1,CRYPTO_LOCK_X509_CRL); @@ -532,8 +532,7 @@ STACK_OF(X509)* X509_STORE_get1_certs(X509_STORE_CTX *ctx, X509_NAME *nm) { obj = sk_X509_OBJECT_value(ctx->ctx->objs, idx); x = obj->data.x509; - CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509); - if (!sk_X509_push(sk, x)) + if (!sk_X509_push(sk, X509_up_ref(x))) { CRYPTO_w_unlock(CRYPTO_LOCK_X509_STORE); X509_free(x); diff --git a/crypto/x509/x509_vfy.c b/crypto/x509/x509_vfy.c index fa5565ba..18bb7720 100644 --- a/crypto/x509/x509_vfy.c +++ b/crypto/x509/x509_vfy.c @@ -177,7 +177,7 @@ static X509 *lookup_cert_match(X509_STORE_CTX *ctx, X509 *x) break; } if (i < sk_X509_num(certs)) - CRYPTO_add(&xtmp->references,1,CRYPTO_LOCK_X509); + X509_up_ref(xtmp); else xtmp = NULL; sk_X509_pop_free(certs, X509_free); @@ -211,7 +211,7 @@ int X509_verify_cert(X509_STORE_CTX *ctx) OPENSSL_PUT_ERROR(X509, X509_verify_cert, ERR_R_MALLOC_FAILURE); goto end; } - CRYPTO_add(&ctx->cert->references,1,CRYPTO_LOCK_X509); + X509_up_ref(ctx->cert); ctx->last_untrusted=1; } @@ -494,7 +494,7 @@ static int get_issuer_sk(X509 **issuer, X509_STORE_CTX *ctx, X509 *x) *issuer = find_issuer(ctx, ctx->other_ctx, x); if (*issuer) { - CRYPTO_add(&(*issuer)->references,1,CRYPTO_LOCK_X509); + X509_up_ref(*issuer); return 1; } else diff --git a/crypto/x509/x_x509.c b/crypto/x509/x_x509.c index 712cff4b..5cda3c7a 100644 --- a/crypto/x509/x_x509.c +++ b/crypto/x509/x_x509.c @@ -136,6 +136,12 @@ ASN1_SEQUENCE_ref(X509, x509_cb, CRYPTO_LOCK_X509) = { IMPLEMENT_ASN1_FUNCTIONS(X509) IMPLEMENT_ASN1_DUP_FUNCTION(X509) +X509 *X509_up_ref(X509 *x) + { + CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509); + return x; + } + int X509_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func) { |