#include <openssl/evp.h>
#include <openssl/params.h>
#include <openssl/crypto.h>
+#include <internal/cryptlib.h>
#include <openssl/fipskey.h>
#include <openssl/err.h>
#include <openssl/proverr.h>
static void set_fips_state(int state)
{
- CRYPTO_THREAD_write_lock(fips_state_lock);
- FIPS_state = state;
- CRYPTO_THREAD_unlock(fips_state_lock);
+ if (ossl_assert(CRYPTO_THREAD_write_lock(fips_state_lock) != 0)) {
+ FIPS_state = state;
+ CRYPTO_THREAD_unlock(fips_state_lock);
+ }
}
/* This API is triggered either on loading of the FIPS module or on demand */
if (!RUN_ONCE(&fips_self_test_init, do_fips_self_test_init))
return 0;
- CRYPTO_THREAD_read_lock(fips_state_lock);
+ if (!CRYPTO_THREAD_read_lock(fips_state_lock))
+ return 0;
loclstate = FIPS_state;
CRYPTO_THREAD_unlock(fips_state_lock);
return 0;
}
- CRYPTO_THREAD_write_lock(self_test_lock);
- CRYPTO_THREAD_read_lock(fips_state_lock);
+ if (!CRYPTO_THREAD_write_lock(self_test_lock))
+ return 0;
+ if (!CRYPTO_THREAD_read_lock(fips_state_lock)) {
+ CRYPTO_THREAD_unlock(self_test_lock);
+ return 0;
+ }
if (FIPS_state == FIPS_STATE_RUNNING) {
CRYPTO_THREAD_unlock(fips_state_lock);
if (!on_demand_test) {