diff options
| author | claudio <> | 2021-09-13 15:26:53 +0000 |
|---|---|---|
| committer | claudio <> | 2021-09-13 15:26:53 +0000 |
| commit | a8af1574ae71c3f2012323155f8e2c784780de4c (patch) | |
| tree | 1e5a7fbaa44c119f2725f9d0de26080f083a1c57 /src | |
| parent | 10e8e3b7f398be5d656d5725a95663a364220e35 (diff) | |
| download | openbsd-a8af1574ae71c3f2012323155f8e2c784780de4c.tar.gz openbsd-a8af1574ae71c3f2012323155f8e2c784780de4c.tar.bz2 openbsd-a8af1574ae71c3f2012323155f8e2c784780de4c.zip | |
In X509_check_issued() do the same dance around x509v3_cache_extensions()
as in all other palces. Check the EXFLAG_SET flag first and if not set
grab the CRYPTO_LOCK_X509 before calling x509v3_cache_extensions().
OK tb@ beck@
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/libcrypto/x509/x509_purp.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/lib/libcrypto/x509/x509_purp.c b/src/lib/libcrypto/x509/x509_purp.c index 3f0081fe40..86ee27407e 100644 --- a/src/lib/libcrypto/x509/x509_purp.c +++ b/src/lib/libcrypto/x509/x509_purp.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: x509_purp.c,v 1.6 2021/09/02 12:41:44 job Exp $ */ | 1 | /* $OpenBSD: x509_purp.c,v 1.7 2021/09/13 15:26:53 claudio 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 2001. | 3 | * project 2001. |
| 4 | */ | 4 | */ |
| @@ -871,10 +871,18 @@ X509_check_issued(X509 *issuer, X509 *subject) | |||
| 871 | if (X509_NAME_cmp(X509_get_subject_name(issuer), | 871 | if (X509_NAME_cmp(X509_get_subject_name(issuer), |
| 872 | X509_get_issuer_name(subject))) | 872 | X509_get_issuer_name(subject))) |
| 873 | return X509_V_ERR_SUBJECT_ISSUER_MISMATCH; | 873 | return X509_V_ERR_SUBJECT_ISSUER_MISMATCH; |
| 874 | x509v3_cache_extensions(issuer); | 874 | if (!(issuer->ex_flags & EXFLAG_SET)) { |
| 875 | CRYPTO_w_lock(CRYPTO_LOCK_X509); | ||
| 876 | x509v3_cache_extensions(issuer); | ||
| 877 | CRYPTO_w_unlock(CRYPTO_LOCK_X509); | ||
| 878 | } | ||
| 875 | if (issuer->ex_flags & EXFLAG_INVALID) | 879 | if (issuer->ex_flags & EXFLAG_INVALID) |
| 876 | return X509_V_ERR_UNSPECIFIED; | 880 | return X509_V_ERR_UNSPECIFIED; |
| 877 | x509v3_cache_extensions(subject); | 881 | if (!(subject->ex_flags & EXFLAG_SET)) { |
| 882 | CRYPTO_w_lock(CRYPTO_LOCK_X509); | ||
| 883 | x509v3_cache_extensions(subject); | ||
| 884 | CRYPTO_w_unlock(CRYPTO_LOCK_X509); | ||
| 885 | } | ||
| 878 | if (subject->ex_flags & EXFLAG_INVALID) | 886 | if (subject->ex_flags & EXFLAG_INVALID) |
| 879 | return X509_V_ERR_UNSPECIFIED; | 887 | return X509_V_ERR_UNSPECIFIED; |
| 880 | 888 | ||
