Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/boringssl.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Benjamin <davidben@chromium.org>2014-08-06 06:22:49 +0400
committerAdam Langley <agl@google.com>2014-08-07 04:06:34 +0400
commit150c617cfce408faf1274a60e5db194595cb4473 (patch)
tree35dc71d4a4f1afe75561befbb1543470f96ed514 /crypto/x509
parente6e15fc3a19ac6e4317d7245df24313c261fc2bb (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.c3
-rw-r--r--crypto/x509/x509_lu.c5
-rw-r--r--crypto/x509/x509_vfy.c6
-rw-r--r--crypto/x509/x_x509.c6
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)
{