diff options
author | Oleg Bulatov <oleg@bulatov.me> | 2024-04-10 00:17:35 +0200 |
---|---|---|
committer | Tomas Mraz <tomas@openssl.org> | 2024-04-11 10:07:52 +0200 |
commit | e661fbc55e270bbffb9725af7483631c8895b7eb (patch) | |
tree | 42d340e4aa3492cea84ede489038ef04f625b8d8 /test/threadstest.c | |
parent | 5a13d35f243be66f6ad914aefe99fb708812dff1 (diff) |
crypto/provider_core.c: Allocate activatecnt_lock
CRYPTO_atomic_add has a lock as a parameter, which is often ignored, but in
some cases (for example, when BROKEN_CLANG_ATOMICS is defined) it is required.
There is no easy way to determine if the lock is needed or not. The current
logic looks like this:
if defined(OPENSSL_THREADS) && !defined(CRYPTO_TDEBUG) && !defined(OPENSSL_SYS_WINDOWS)
if defined(__GNUC__) && defined(__ATOMIC_ACQ_REL) && !defined(BROKEN_CLANG_ATOMICS)
- It works without the lock, but in general the need for the
lock depends on __atomic_is_lock_free results
elif defined(__sun) && (defined(__SunOS_5_10) || defined(__SunOS_5_11))
- The lock is not needed (unless ret is NULL, which should never
happen?)
else
- The lock is required
endif
else
- The lock is not needed
endif
Adding such conditions outside of crypto.h is error-prone, so it is better to
always allocate the lock, otherwise CRYPTO_atomic_add may silently fail.
Fixes #23376.
CLA: trivial
Fixes: fc570b2605 ("Avoid taking a write lock in ossl_provider_doall_activated()")
Signed-off-by: Oleg Bulatov <oleg@bulatov.me>
Reviewed-by: Tim Hudson <tjh@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/24081)
(cherry picked from commit 2fd6c12e85ec7558cbdee08033f822c42ee0f5d4)
Diffstat (limited to 'test/threadstest.c')
0 files changed, 0 insertions, 0 deletions