Commit c001ce33 authored by Alessandro Ghedini's avatar Alessandro Ghedini Committed by Rich Salz
Browse files

Convert CRYPTO_LOCK_X509_* to new multi-threading API

parent 41cfbccc
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -105,6 +105,7 @@ int asn1_do_lock(ASN1_VALUE **pval, int op, const ASN1_ITEM *it)
{
    const ASN1_AUX *aux;
    int *lck, ret;
    CRYPTO_RWLOCK **lock;
    if ((it->itype != ASN1_ITYPE_SEQUENCE)
        && (it->itype != ASN1_ITYPE_NDEF_SEQUENCE))
        return 0;
@@ -112,15 +113,21 @@ int asn1_do_lock(ASN1_VALUE **pval, int op, const ASN1_ITEM *it)
    if (!aux || !(aux->flags & ASN1_AFLG_REFCOUNT))
        return 0;
    lck = offset2ptr(*pval, aux->ref_offset);
    lock = offset2ptr(*pval, aux->ref_lock);
    if (op == 0) {
        *lck = 1;
        *lock = CRYPTO_THREAD_lock_new();
        if (*lock == NULL)
            return 0;
        return 1;
    }
    ret = CRYPTO_add(lck, op, aux->ref_lock);
    CRYPTO_atomic_add(lck, op, &ret, *lock);
#ifdef REF_PRINT
    fprintf(stderr, "%p:%4d:%s\n", it, *lck, it->sname);
#endif
    REF_ASSERT_ISNT(ret < 0);
    if (ret == 0)
        CRYPTO_THREAD_lock_free(*lock);
    return ret;
}

+12 −3
Original line number Diff line number Diff line
@@ -68,10 +68,18 @@ X509_INFO *X509_INFO_new(void)
    ret = OPENSSL_zalloc(sizeof(*ret));
    if (ret == NULL) {
        ASN1err(ASN1_F_X509_INFO_NEW, ERR_R_MALLOC_FAILURE);
        return (NULL);
        return NULL;
    }

    ret->references = 1;
    return (ret);

    ret->lock = CRYPTO_THREAD_lock_new();
    if (ret->lock == NULL) {
        X509_INFO_free(ret);
        return NULL;
    }

    return ret;
}

void X509_INFO_free(X509_INFO *x)
@@ -81,7 +89,7 @@ void X509_INFO_free(X509_INFO *x)
    if (x == NULL)
        return;

    i = CRYPTO_add(&x->references, -1, CRYPTO_LOCK_X509_INFO);
    CRYPTO_atomic_add(&x->references, -1, &i, x->lock);
    REF_PRINT_COUNT("X509_INFO", x);
    if (i > 0)
        return;
@@ -91,5 +99,6 @@ void X509_INFO_free(X509_INFO *x)
    X509_CRL_free(x->crl);
    X509_PKEY_free(x->x_pkey);
    OPENSSL_free(x->enc_data);
    CRYPTO_THREAD_lock_free(x->lock);
    OPENSSL_free(x);
}
+7 −1
Original line number Diff line number Diff line
@@ -70,6 +70,11 @@ X509_PKEY *X509_PKEY_new(void)
        goto err;

    ret->references = 1;
    ret->lock = CRYPTO_THREAD_lock_new();
    if (ret->lock == NULL) {
        OPENSSL_free(ret);
        return NULL;
    }
    ret->enc_algor = X509_ALGOR_new();
    ret->enc_pkey = ASN1_OCTET_STRING_new();
    if (ret->enc_algor == NULL || ret->enc_pkey == NULL)
@@ -89,7 +94,7 @@ void X509_PKEY_free(X509_PKEY *x)
    if (x == NULL)
        return;

    i = CRYPTO_add(&x->references, -1, CRYPTO_LOCK_X509_PKEY);
    CRYPTO_atomic_add(&x->references, -1, &i, x->lock);
    REF_PRINT_COUNT("X509_PKEY", x);
    if (i > 0)
        return;
@@ -100,5 +105,6 @@ void X509_PKEY_free(X509_PKEY *x)
    EVP_PKEY_free(x->dec_pkey);
    if (x->key_free)
        OPENSSL_free(x->key_data);
    CRYPTO_THREAD_lock_free(x->lock);
    OPENSSL_free(x);
}
+2 −0
Original line number Diff line number Diff line
@@ -143,6 +143,7 @@ EC_KEY *EC_KEY_new_method(ENGINE *engine)
        if (!ENGINE_init(engine)) {
            ECerr(EC_F_EC_KEY_NEW_METHOD, ERR_R_ENGINE_LIB);
            CRYPTO_free_ex_data(CRYPTO_EX_INDEX_EC_KEY, ret, &ret->ex_data);
            CRYPTO_THREAD_lock_free(ret->lock);
            OPENSSL_free(ret);
            return NULL;
        }
@@ -155,6 +156,7 @@ EC_KEY *EC_KEY_new_method(ENGINE *engine)
            ECerr(EC_F_EC_KEY_NEW_METHOD, ERR_R_ENGINE_LIB);
            ENGINE_finish(ret->engine);
            CRYPTO_free_ex_data(CRYPTO_EX_INDEX_EC_KEY, ret, &ret->ex_data);
            CRYPTO_THREAD_lock_free(ret->lock);
            OPENSSL_free(ret);
            return NULL;
        }
+3 −0
Original line number Diff line number Diff line
@@ -104,6 +104,7 @@ struct X509_req_st {
    X509_ALGOR sig_alg;         /* signature algorithm */
    ASN1_BIT_STRING *signature; /* signature */
    int references;
    CRYPTO_RWLOCK *lock;
};

struct X509_crl_info_st {
@@ -141,6 +142,7 @@ struct X509_crl_st {
    /* alternative method to handle this CRL */
    const X509_CRL_METHOD *meth;
    void *meth_data;
    CRYPTO_RWLOCK *lock;
};

struct x509_revoked_st {
@@ -212,6 +214,7 @@ struct x509_st {
# endif
    unsigned char sha1_hash[SHA_DIGEST_LENGTH];
    X509_CERT_AUX *aux;
    CRYPTO_RWLOCK *lock;
} /* X509 */ ;

/* PKCS#8 private key info structure */
Loading