diff --git a/linuxkm/linuxkm_wc_port.h b/linuxkm/linuxkm_wc_port.h index b94957fcf..e290e5bd0 100644 --- a/linuxkm/linuxkm_wc_port.h +++ b/linuxkm/linuxkm_wc_port.h @@ -800,6 +800,7 @@ */ #include typedef struct mutex wolfSSL_Mutex; + #define WOLFSSL_MUTEX_INITIALIZER(lockname) __MUTEX_INITIALIZER(lockname) /* prevent gcc's mm_malloc.h from being included, since it unconditionally * includes stdlib.h, which is kernel-incompatible. diff --git a/src/sniffer.c b/src/sniffer.c index ddcb54033..d5fc5c174 100644 --- a/src/sniffer.c +++ b/src/sniffer.c @@ -447,7 +447,6 @@ typedef struct SnifferServer { struct SnifferServer* next; /* for list */ } SnifferServer; - /* Session Flags */ typedef struct Flags { byte side; /* which end is current packet headed */ @@ -569,13 +568,13 @@ typedef struct SnifferSession { /* Sniffer Server List and mutex */ static THREAD_LS_T WOLFSSL_GLOBAL SnifferServer* ServerList = NULL; #ifndef HAVE_C___ATOMIC -static WOLFSSL_GLOBAL wolfSSL_Mutex ServerListMutex; +static WOLFSSL_GLOBAL wolfSSL_Mutex ServerListMutex WOLFSSL_MUTEX_INITIALIZER_CLAUSE(ServerListMutex); #endif /* Session Hash Table, mutex, and count */ static THREAD_LS_T WOLFSSL_GLOBAL SnifferSession* SessionTable[HASH_SIZE]; #ifndef HAVE_C___ATOMIC -static WOLFSSL_GLOBAL wolfSSL_Mutex SessionMutex; +static WOLFSSL_GLOBAL wolfSSL_Mutex SessionMutex WOLFSSL_MUTEX_INITIALIZER_CLAUSE(SessionMutex); #endif static THREAD_LS_T WOLFSSL_GLOBAL int SessionCount = 0; @@ -584,7 +583,7 @@ static WOLFSSL_GLOBAL int MaxRecoveryMemory = -1; /* per session max recovery memory */ #ifndef WOLFSSL_SNIFFER_NO_RECOVERY /* Recovery of missed data switches and stats */ -static WOLFSSL_GLOBAL wolfSSL_Mutex RecoveryMutex; /* for stats */ +static WOLFSSL_GLOBAL wolfSSL_Mutex RecoveryMutex WOLFSSL_MUTEX_INITIALIZER_CLAUSE(RecoveryMutex); /* for stats */ /* # of sessions with missed data */ static WOLFSSL_GLOBAL word32 MissedDataSessions = 0; #endif @@ -596,7 +595,7 @@ static WOLFSSL_GLOBAL void* ConnectionCbCtx = NULL; #ifdef WOLFSSL_SNIFFER_STATS /* Sessions Statistics */ static WOLFSSL_GLOBAL SSLStats SnifferStats; -static WOLFSSL_GLOBAL wolfSSL_Mutex StatsMutex; +static WOLFSSL_GLOBAL wolfSSL_Mutex StatsMutex WOLFSSL_MUTEX_INITIALIZER_CLAUSE(StatsMutex); #endif #ifdef WOLFSSL_SNIFFER_KEY_CALLBACK @@ -683,6 +682,7 @@ static int addKeyLogSnifferServerHelper(const char* address, void ssl_InitSniffer_ex(int devId) { wolfSSL_Init(); +#ifndef WOLFSSL_MUTEX_INITIALIZER #ifndef HAVE_C___ATOMIC wc_InitMutex(&ServerListMutex); wc_InitMutex(&SessionMutex); @@ -694,6 +694,11 @@ void ssl_InitSniffer_ex(int devId) XMEMSET(&SnifferStats, 0, sizeof(SSLStats)); wc_InitMutex(&StatsMutex); #endif +#endif /* !WOLFSSL_MUTEX_INITIALIZER */ + +#ifdef WOLFSSL_SNIFFER_STATS + XMEMSET(&SnifferStats, 0, sizeof(SSLStats)); +#endif #if defined(WOLF_CRYPTO_CB) || defined(WOLFSSL_ASYNC_CRYPT) CryptoDeviceId = devId; #endif @@ -903,6 +908,7 @@ void ssl_FreeSniffer(void) #endif /* WOLFSSL_SNIFFER_KEYLOGFILE */ +#ifndef WOLFSSL_MUTEX_INITIALIZER #ifndef WOLFSSL_SNIFFER_NO_RECOVERY wc_FreeMutex(&RecoveryMutex); #endif @@ -910,6 +916,7 @@ void ssl_FreeSniffer(void) wc_FreeMutex(&SessionMutex); wc_FreeMutex(&ServerListMutex); #endif +#endif /* !WOLFSSL_MUTEX_INITIALIZER */ #ifdef WOLF_CRYPTO_CB #ifdef HAVE_INTEL_QA_SYNC @@ -7235,7 +7242,7 @@ static THREAD_LS_T WOLFSSL_GLOBAL SecretNode* secretHashTable[WOLFSSL_SNIFFER_KEYLOGFILE_HASH_TABLE_SIZE] = {NULL}; #ifndef HAVE_C___ATOMIC -static WOLFSSL_GLOBAL wolfSSL_Mutex secretListMutex; +static WOLFSSL_GLOBAL wolfSSL_Mutex secretListMutex WOLFSSL_MUTEX_INITIALIZER_CLAUSE(secretListMutex); #endif static unsigned int secretHashFunction(unsigned char* clientRandom); diff --git a/src/ssl.c b/src/ssl.c index 584bf98ea..ad514d27a 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -309,8 +309,10 @@ int wc_OBJ_sn2nid(const char *sn) static WC_RNG globalRNG; static int initGlobalRNG = 0; -static wolfSSL_Mutex globalRNGMutex; +static WC_MAYBE_UNUSED wolfSSL_Mutex globalRNGMutex WOLFSSL_MUTEX_INITIALIZER_CLAUSE(globalRNGMutex); +#ifndef WOLFSSL_MUTEX_INITIALIZER static int globalRNGMutex_valid = 0; +#endif #if defined(OPENSSL_EXTRA) && defined(HAVE_HASHDRBG) static WOLFSSL_DRBG_CTX* gDrbgDefCtx = NULL; @@ -406,8 +408,10 @@ WC_RNG* wolfssl_make_rng(WC_RNG* rng, int* local) * OPENSSL_EXTRA where RAND callbacks are not used */ #ifndef WOLFSSL_NO_OPENSSL_RAND_CB static const WOLFSSL_RAND_METHOD* gRandMethods = NULL; + static wolfSSL_Mutex gRandMethodMutex WOLFSSL_MUTEX_INITIALIZER_CLAUSE(gRandMethodMutex); + #ifndef WOLFSSL_MUTEX_INITIALIZER static int gRandMethodsInit = 0; - static wolfSSL_Mutex gRandMethodMutex; + #endif #endif /* !WOLFSSL_NO_OPENSSL_RAND_CB */ #endif /* OPENSSL_EXTRA */ @@ -1265,11 +1269,9 @@ int wolfSSL_send_session(WOLFSSL* ssl) /* prevent multiple mutex initializations */ static volatile WOLFSSL_GLOBAL int initRefCount = 0; -#ifdef WOLFSSL_MUTEX_INITIALIZER -static WOLFSSL_GLOBAL wolfSSL_Mutex count_mutex = WOLFSSL_MUTEX_INITIALIZER; -#else -static WOLFSSL_GLOBAL wolfSSL_Mutex count_mutex; /* init ref count mutex */ -static WOLFSSL_GLOBAL int count_mutex_valid = 0; +static WOLFSSL_GLOBAL wolfSSL_Mutex inits_count_mutex WOLFSSL_MUTEX_INITIALIZER_CLAUSE(inits_count_mutex); /* init ref count mutex */ +#ifndef WOLFSSL_MUTEX_INITIALIZER +static WOLFSSL_GLOBAL int inits_count_mutex_valid = 0; #endif /* Create a new WOLFSSL_CTX struct and return the pointer to created struct. @@ -6164,8 +6166,10 @@ int AddCA(WOLFSSL_CERT_MANAGER* cm, DerBuffer** pDer, int type, int verify) /* Client Cache */ /* uses session mutex */ - static WOLFSSL_GLOBAL wolfSSL_Mutex clisession_mutex; /* ClientCache mutex */ + static WOLFSSL_GLOBAL wolfSSL_Mutex clisession_mutex WOLFSSL_MUTEX_INITIALIZER_CLAUSE(clisession_mutex); /* ClientCache mutex */ + #ifndef WOLFSSL_MUTEX_INITIALIZER static WOLFSSL_GLOBAL int clisession_mutex_valid = 0; + #endif #endif /* !NO_CLIENT_CACHE */ void EvictSessionFromCache(WOLFSSL_SESSION* session) @@ -6223,22 +6227,40 @@ int wolfSSL_Init(void) WOLFSSL_ENTER("wolfSSL_Init"); +#ifndef WOLFSSL_MUTEX_INITIALIZER + if (inits_count_mutex_valid == 0) { + if (wc_InitMutex(&inits_count_mutex) != 0) { + WOLFSSL_MSG("Bad Init Mutex count"); + return BAD_MUTEX_E; + } + else { + inits_count_mutex_valid = 1; + } + } +#endif /* !WOLFSSL_MUTEX_INITIALIZER */ + + if (wc_LockMutex(&inits_count_mutex) != 0) { + WOLFSSL_MSG("Bad Lock Mutex count"); + return BAD_MUTEX_E; + } + + if ((ret == WOLFSSL_SUCCESS) && (initRefCount == 0)) { + /* Initialize crypto for use with TLS connection */ + #if FIPS_VERSION_GE(5,1) ret = wolfCrypt_SetPrivateKeyReadEnable_fips(1, WC_KEYTYPE_ALL); - if (ret != 0) - return ret; - else + if (ret == 0) ret = WOLFSSL_SUCCESS; #endif - if (initRefCount == 0) { - /* Initialize crypto for use with TLS connection */ - if (wolfCrypt_Init() != 0) { - WOLFSSL_MSG("Bad wolfCrypt Init"); - ret = WC_INIT_E; + if (ret == WOLFSSL_SUCCESS) { + if (wolfCrypt_Init() != 0) { + WOLFSSL_MSG("Bad wolfCrypt Init"); + ret = WC_INIT_E; + } } -#ifdef HAVE_GLOBAL_RNG +#if defined(HAVE_GLOBAL_RNG) && !defined(WOLFSSL_MUTEX_INITIALIZER) if (ret == WOLFSSL_SUCCESS) { if (wc_InitMutex(&globalRNGMutex) != 0) { WOLFSSL_MSG("Bad Init Mutex rng"); @@ -6293,6 +6315,7 @@ int wolfSSL_Init(void) } #endif #ifndef NO_CLIENT_CACHE + #ifndef WOLFSSL_MUTEX_INITIALIZER if (ret == WOLFSSL_SUCCESS) { if (wc_InitMutex(&clisession_mutex) != 0) { WOLFSSL_MSG("Bad Init Mutex session"); @@ -6302,19 +6325,9 @@ int wolfSSL_Init(void) clisession_mutex_valid = 1; } } + #endif #endif #endif -#ifndef WOLFSSL_MUTEX_INITIALIZER - if (ret == WOLFSSL_SUCCESS) { - if (wc_InitMutex(&count_mutex) != 0) { - WOLFSSL_MSG("Bad Init Mutex count"); - ret = BAD_MUTEX_E; - } - else { - count_mutex_valid = 1; - } - } -#endif /* !WOLFSSL_MUTEX_INITIALIZER */ #if defined(OPENSSL_EXTRA) && defined(HAVE_ATEXIT) /* OpenSSL registers cleanup using atexit */ if ((ret == WOLFSSL_SUCCESS) && (atexit(AtExitCleanup) != 0)) { @@ -6325,16 +6338,11 @@ int wolfSSL_Init(void) } if (ret == WOLFSSL_SUCCESS) { - if (wc_LockMutex(&count_mutex) != 0) { - WOLFSSL_MSG("Bad Lock Mutex count"); - ret = BAD_MUTEX_E; - } - else { - initRefCount++; - wc_UnLockMutex(&count_mutex); - } + initRefCount++; } + wc_UnLockMutex(&inits_count_mutex); + if (ret != WOLFSSL_SUCCESS) { initRefCount = 1; /* Force cleanup */ (void)wolfSSL_Cleanup(); /* Ignore any error from cleanup */ @@ -13620,9 +13628,9 @@ int wolfSSL_Cleanup(void) WOLFSSL_ENTER("wolfSSL_Cleanup"); #ifndef WOLFSSL_MUTEX_INITIALIZER - if (count_mutex_valid == 1) { + if (inits_count_mutex_valid == 1) { #endif - if (wc_LockMutex(&count_mutex) != 0) { + if (wc_LockMutex(&inits_count_mutex) != 0) { WOLFSSL_MSG("Bad Lock Mutex count"); return BAD_MUTEX_E; } @@ -13637,9 +13645,9 @@ int wolfSSL_Cleanup(void) } #ifndef WOLFSSL_MUTEX_INITIALIZER - if (count_mutex_valid == 1) { + if (inits_count_mutex_valid == 1) { #endif - wc_UnLockMutex(&count_mutex); + wc_UnLockMutex(&inits_count_mutex); #ifndef WOLFSSL_MUTEX_INITIALIZER } #endif @@ -13683,6 +13691,7 @@ int wolfSSL_Cleanup(void) } } #ifndef NO_CLIENT_CACHE + #ifndef WOLFSSL_MUTEX_INITIALIZER if ((clisession_mutex_valid == 1) && (wc_FreeMutex(&clisession_mutex) != 0)) { if (ret == WOLFSSL_SUCCESS) @@ -13690,14 +13699,15 @@ int wolfSSL_Cleanup(void) } clisession_mutex_valid = 0; #endif + #endif #endif /* !NO_SESSION_CACHE */ #ifndef WOLFSSL_MUTEX_INITIALIZER - if ((count_mutex_valid == 1) && (wc_FreeMutex(&count_mutex) != 0)) { + if ((inits_count_mutex_valid == 1) && (wc_FreeMutex(&inits_count_mutex) != 0)) { if (ret == WOLFSSL_SUCCESS) ret = BAD_MUTEX_E; } - count_mutex_valid = 0; + inits_count_mutex_valid = 0; #endif #ifdef OPENSSL_EXTRA @@ -13718,11 +13728,13 @@ int wolfSSL_Cleanup(void) #endif #ifdef HAVE_GLOBAL_RNG +#ifndef WOLFSSL_MUTEX_INITIALIZER if ((globalRNGMutex_valid == 1) && (wc_FreeMutex(&globalRNGMutex) != 0)) { if (ret == WOLFSSL_SUCCESS) ret = BAD_MUTEX_E; } globalRNGMutex_valid = 0; +#endif /* !WOLFSSL_MUTEX_INITIALIZER */ #if defined(OPENSSL_EXTRA) && defined(HAVE_HASHDRBG) wolfSSL_FIPS_drbg_free(gDrbgDefCtx); @@ -32949,6 +32961,7 @@ void wolfSSL_BUF_MEM_free(WOLFSSL_BUF_MEM* buf) #if defined(OPENSSL_EXTRA) && !defined(WOLFSSL_NO_OPENSSL_RAND_CB) static int wolfSSL_RAND_InitMutex(void) { +#ifndef WOLFSSL_MUTEX_INITIALIZER if (gRandMethodsInit == 0) { if (wc_InitMutex(&gRandMethodMutex) != 0) { WOLFSSL_MSG("Bad Init Mutex rand methods"); @@ -32956,6 +32969,7 @@ static int wolfSSL_RAND_InitMutex(void) } gRandMethodsInit = 1; } +#endif return 0; } #endif @@ -33327,8 +33341,10 @@ void wolfSSL_RAND_Cleanup(void) wc_UnLockMutex(&gRandMethodMutex); } + #ifndef WOLFSSL_MUTEX_INITIALIZER if (wc_FreeMutex(&gRandMethodMutex) == 0) gRandMethodsInit = 0; + #endif #endif #ifdef HAVE_GLOBAL_RNG if (wc_LockMutex(&globalRNGMutex) == 0) { diff --git a/wolfcrypt/src/ecc.c b/wolfcrypt/src/ecc.c index 649ed6d80..2b7b01080 100644 --- a/wolfcrypt/src/ecc.c +++ b/wolfcrypt/src/ecc.c @@ -1488,7 +1488,7 @@ static int xil_mpi_import(mp_int *mpi, /* cache (mp_int) of the curve parameters */ static ecc_curve_spec* ecc_curve_spec_cache[ECC_SET_COUNT]; #ifndef SINGLE_THREADED - static wolfSSL_Mutex ecc_curve_cache_mutex; + static wolfSSL_Mutex ecc_curve_cache_mutex WOLFSSL_MUTEX_INITIALIZER_CLAUSE(ecc_curve_cache_mutex); #endif #define DECLARE_CURVE_SPECS(intcount) ecc_curve_spec* curve = NULL @@ -1758,7 +1758,8 @@ static int wc_ecc_curve_load(const ecc_set_type* dp, ecc_curve_spec** pCurve, int wc_ecc_curve_cache_init(void) { int ret = 0; -#if defined(ECC_CACHE_CURVE) && !defined(SINGLE_THREADED) +#if defined(ECC_CACHE_CURVE) && !defined(SINGLE_THREADED) && \ + !defined(WOLFSSL_MUTEX_INITIALIZER) ret = wc_InitMutex(&ecc_curve_cache_mutex); #endif return ret; @@ -1777,7 +1778,8 @@ void wc_ecc_curve_cache_free(void) } } -#if defined(ECC_CACHE_CURVE) && !defined(SINGLE_THREADED) +#if defined(ECC_CACHE_CURVE) && !defined(SINGLE_THREADED) && \ + !defined(WOLFSSL_MUTEX_INITIALIZER) wc_FreeMutex(&ecc_curve_cache_mutex); #endif } @@ -11598,8 +11600,10 @@ typedef struct { static THREAD_LS_T fp_cache_t fp_cache[FP_ENTRIES]; #ifndef HAVE_THREAD_LS + static wolfSSL_Mutex ecc_fp_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(ecc_fp_lock); +#ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initMutex = 0; /* prevent multiple mutex inits */ - static wolfSSL_Mutex ecc_fp_lock; +#endif #endif /* HAVE_THREAD_LS */ /* simple table to help direct the generation of the LUT */ @@ -12886,10 +12890,12 @@ int ecc_mul2add(ecc_point* A, mp_int* kA, } #ifndef HAVE_THREAD_LS +#ifndef WOLFSSL_MUTEX_INITIALIZER if (initMutex == 0) { /* extra sanity check if wolfCrypt_Init not called */ wc_InitMutex(&ecc_fp_lock); initMutex = 1; } +#endif if (wc_LockMutex(&ecc_fp_lock) != 0) { #ifdef WOLFSSL_SMALL_STACK @@ -13044,10 +13050,12 @@ int wc_ecc_mulmod_ex(const mp_int* k, ecc_point *G, ecc_point *R, mp_int* a, } #ifndef HAVE_THREAD_LS +#ifndef WOLFSSL_MUTEX_INITIALIZER if (initMutex == 0) { /* extra sanity check if wolfCrypt_Init not called */ wc_InitMutex(&ecc_fp_lock); initMutex = 1; } +#endif if (wc_LockMutex(&ecc_fp_lock) != 0) { err = BAD_MUTEX_E; @@ -13219,10 +13227,12 @@ int wc_ecc_mulmod_ex2(const mp_int* k, ecc_point *G, ecc_point *R, mp_int* a, } #ifndef HAVE_THREAD_LS +#ifndef WOLFSSL_MUTEX_INITIALIZER if (initMutex == 0) { /* extra sanity check if wolfCrypt_Init not called */ wc_InitMutex(&ecc_fp_lock); initMutex = 1; } +#endif if (wc_LockMutex(&ecc_fp_lock) != 0) { err = BAD_MUTEX_E; @@ -13379,12 +13389,14 @@ void wc_ecc_fp_init(void) { #ifndef WOLFSSL_SP_MATH #ifndef HAVE_THREAD_LS +#ifndef WOLFSSL_MUTEX_INITIALIZER if (initMutex == 0) { wc_InitMutex(&ecc_fp_lock); initMutex = 1; } #endif #endif +#endif } @@ -13394,10 +13406,12 @@ void wc_ecc_fp_free(void) { #if !defined(WOLFSSL_SP_MATH) #ifndef HAVE_THREAD_LS +#ifndef WOLFSSL_MUTEX_INITIALIZER if (initMutex == 0) { /* extra sanity check if wolfCrypt_Init not called */ wc_InitMutex(&ecc_fp_lock); initMutex = 1; } +#endif if (wc_LockMutex(&ecc_fp_lock) == 0) { #endif /* HAVE_THREAD_LS */ @@ -13406,8 +13420,10 @@ void wc_ecc_fp_free(void) #ifndef HAVE_THREAD_LS wc_UnLockMutex(&ecc_fp_lock); +#ifndef WOLFSSL_MUTEX_INITIALIZER wc_FreeMutex(&ecc_fp_lock); initMutex = 0; +#endif } #endif /* HAVE_THREAD_LS */ #endif diff --git a/wolfcrypt/src/logging.c b/wolfcrypt/src/logging.c index afa0c6f01..a84645427 100644 --- a/wolfcrypt/src/logging.c +++ b/wolfcrypt/src/logging.c @@ -818,7 +818,7 @@ static struct wc_error_queue* wc_current_node; static void* wc_error_heap; /* mutex for list operation protection */ -static wolfSSL_Mutex wc_error_mutex; +static wolfSSL_Mutex wc_error_mutex WOLFSSL_MUTEX_INITIALIZER_CLAUSE(wc_error_mutex); #define ERRQ_MUTEX_INIT() wc_InitMutex(&wc_error_mutex) #define ERRQ_MUTEX_FREE() wc_FreeMutex(&wc_error_mutex) #define ERRQ_LOCK() wc_LockMutex(&wc_error_mutex) @@ -827,10 +827,12 @@ static wolfSSL_Mutex wc_error_mutex; /* Internal function that is called by wolfCrypt_Init() */ int wc_LoggingInit(void) { +#ifndef WOLFSSL_MUTEX_INITIALIZER if (ERRQ_MUTEX_INIT() != 0) { WOLFSSL_MSG("Bad Init Mutex"); return BAD_MUTEX_E; } +#endif wc_errors_count = 0; wc_errors = NULL; wc_current_node = NULL; @@ -845,10 +847,12 @@ int wc_LoggingCleanup(void) /* clear logging entries */ wc_ClearErrorNodes(); /* free mutex */ +#ifndef WOLFSSL_MUTEX_INITIALIZER if (ERRQ_MUTEX_FREE() != 0) { WOLFSSL_MSG("Bad Mutex free"); return BAD_MUTEX_E; } +#endif return 0; } diff --git a/wolfcrypt/src/memory.c b/wolfcrypt/src/memory.c index e91997188..4b068ce9c 100644 --- a/wolfcrypt/src/memory.c +++ b/wolfcrypt/src/memory.c @@ -120,7 +120,7 @@ int wolfSSL_GetAllocators(wolfSSL_Malloc_cb* mf, } #ifdef WOLFSSL_MEM_FAIL_COUNT -static wolfSSL_Mutex memFailMutex; +static wolfSSL_Mutex memFailMutex WOLFSSL_MUTEX_INITIALIZER_CLAUSE(memFailMutex); int mem_fail_allocs = 0; int mem_fail_frees = 0; int mem_fail_cnt = 0; @@ -128,7 +128,9 @@ int mem_fail_cnt = 0; void wc_MemFailCount_Init() { char* cnt; +#ifndef WOLFSSL_MUTEX_INITIALIZER wc_InitMutex(&memFailMutex); +#endif cnt = getenv("MEM_FAIL_CNT"); if (cnt != NULL) { fprintf(stderr, "MemFailCount At: %d\n", mem_fail_cnt); @@ -158,7 +160,9 @@ static void wc_MemFailCount_FreeMem(void) } void wc_MemFailCount_Free() { +#ifndef WOLFSSL_MUTEX_INITIALIZER wc_FreeMutex(&memFailMutex); +#endif fprintf(stderr, "MemFailCount Total: %d\n", mem_fail_allocs); fprintf(stderr, "MemFailCount Frees: %d\n", mem_fail_frees); } @@ -196,7 +200,7 @@ static MemZero memZero[WOLFSSL_MEM_CHECK_ZERO_CACHE_LEN]; */ static int nextIdx = -1; /* Mutex to protect modifying list of addresses to check. */ -static wolfSSL_Mutex zeroMutex; +static wolfSSL_Mutex zeroMutex WOLFSSL_MUTEX_INITIALIZER_CLAUSE(zeroMutex); /* Initialize the table of addresses and the mutex. */ @@ -205,7 +209,9 @@ void wc_MemZero_Init() /* Clear the table to more easily see what is valid. */ XMEMSET(memZero, 0, sizeof(memZero)); /* Initialize mutex. */ +#ifndef WOLFSSL_MUTEX_INITIALIZER wc_InitMutex(&zeroMutex); +#endif /* Next index is first entry. */ nextIdx = 0; } @@ -215,7 +221,9 @@ void wc_MemZero_Init() void wc_MemZero_Free() { /* Free mutex. */ +#ifndef WOLFSSL_MUTEX_INITIALIZER wc_FreeMutex(&zeroMutex); +#endif /* Make sure we checked all addresses. */ if (nextIdx > 0) { int i; diff --git a/wolfcrypt/src/random.c b/wolfcrypt/src/random.c index e74320872..f310b01b3 100644 --- a/wolfcrypt/src/random.c +++ b/wolfcrypt/src/random.c @@ -92,9 +92,12 @@ This library contains implementation for the random number generator. #elif defined(HAVE_WNR) #include #include - wolfSSL_Mutex wnr_mutex; /* global netRandom mutex */ + wolfSSL_Mutex wnr_mutex WOLFSSL_MUTEX_INITIALIZER_CLAUSE(wnr_mutex); /* global netRandom mutex */ int wnr_timeout = 0; /* entropy timeout, milliseconds */ - int wnr_mutex_init = 0; /* flag for mutex init */ + #ifndef WOLFSSL_MUTEX_INITIALIZER + int wnr_mutex_inited = 0; /* flag for mutex init */ + #endif + int wnr_inited = 0; /* flag for whether wc_InitNetRandom() has been called */ wnr_context* wnr_ctx; /* global netRandom context */ #elif defined(FREESCALE_KSDK_2_0_TRNG) #include "fsl_trng.h" @@ -1376,7 +1379,7 @@ static int Entropy_Condition(byte* output, word32 len, byte* noise, /* Mutex to prevent multiple callers requesting entropy operations at the * same time. */ -static wolfSSL_Mutex entropy_mutex; +static wolfSSL_Mutex entropy_mutex WOLFSSL_MUTEX_INITIALIZER_CLAUSE(entropy_mutex); /* Get entropy of specified strength. * @@ -1503,7 +1506,7 @@ int Entropy_Init() /* Check whether initialization has succeeded before. */ if (!entropy_memuse_initialized) { - #ifndef SINGLE_THREADED + #if !defined(SINGLE_THREADED) && !defined(WOLFSSL_MUTEX_INITIALIZER) ret = wc_InitMutex(&entropy_mutex); #endif if (ret == 0) { @@ -1540,7 +1543,7 @@ void Entropy_Final() if (entropy_memuse_initialized) { /* Dispose of the SHA3-356 hash object. */ wc_Sha3_256_Free(&entropyHash); - #ifndef SINGLE_THREADED + #if !defined(SINGLE_THREADED) && !defined(WOLFSSL_MUTEX_INITIALIZER) wc_FreeMutex(&entropy_mutex); #endif /* Clear health test data. */ @@ -2277,10 +2280,13 @@ static int wc_RNG_HealthTestLocal(int reseed, void* heap, int devId) */ int wc_InitNetRandom(const char* configFile, wnr_hmac_key hmac_cb, int timeout) { + int ret; + if (configFile == NULL || timeout < 0) return BAD_FUNC_ARG; - if (wnr_mutex_init > 0) { +#ifndef WOLFSSL_MUTEX_INITIALIZER + if (wnr_mutex_inited > 0) { WOLFSSL_MSG("netRandom context already created, skipping"); return 0; } @@ -2289,7 +2295,14 @@ int wc_InitNetRandom(const char* configFile, wnr_hmac_key hmac_cb, int timeout) WOLFSSL_MSG("Bad Init Mutex wnr_mutex"); return BAD_MUTEX_E; } - wnr_mutex_init = 1; + + wnr_mutex_inited = 1; +#endif + + if (wnr_inited > 0) { + WOLFSSL_MSG("netRandom context already created, skipping"); + return 0; + } if (wc_LockMutex(&wnr_mutex) != 0) { WOLFSSL_MSG("Bad Lock Mutex wnr_mutex"); @@ -2302,7 +2315,8 @@ int wc_InitNetRandom(const char* configFile, wnr_hmac_key hmac_cb, int timeout) /* create global wnr_context struct */ if (wnr_create(&wnr_ctx) != WNR_ERROR_NONE) { WOLFSSL_MSG("Error creating global netRandom context"); - return RNG_FAILURE_E; + ret = RNG_FAILURE_E; + goto out; } /* load config file */ @@ -2310,7 +2324,8 @@ int wc_InitNetRandom(const char* configFile, wnr_hmac_key hmac_cb, int timeout) WOLFSSL_MSG("Error loading config file into netRandom context"); wnr_destroy(wnr_ctx); wnr_ctx = NULL; - return RNG_FAILURE_E; + ret = RNG_FAILURE_E; + goto out; } /* create/init polling mechanism */ @@ -2318,7 +2333,8 @@ int wc_InitNetRandom(const char* configFile, wnr_hmac_key hmac_cb, int timeout) WOLFSSL_MSG("Error initializing netRandom polling mechanism"); wnr_destroy(wnr_ctx); wnr_ctx = NULL; - return RNG_FAILURE_E; + ret = RNG_FAILURE_E; + goto out; } /* validate config, set HMAC callback (optional) */ @@ -2327,12 +2343,17 @@ int wc_InitNetRandom(const char* configFile, wnr_hmac_key hmac_cb, int timeout) wnr_destroy(wnr_ctx); wnr_ctx = NULL; wnr_poll_destroy(); - return RNG_FAILURE_E; + ret = RNG_FAILURE_E; + goto out; } + wnr_inited = 1; + +out: + wc_UnLockMutex(&wnr_mutex); - return 0; + return ret; } /* @@ -2341,7 +2362,7 @@ int wc_InitNetRandom(const char* configFile, wnr_hmac_key hmac_cb, int timeout) */ int wc_FreeNetRandom(void) { - if (wnr_mutex_init > 0) { + if (wnr_inited > 0) { if (wc_LockMutex(&wnr_mutex) != 0) { WOLFSSL_MSG("Bad Lock Mutex wnr_mutex"); @@ -2356,8 +2377,12 @@ int wc_FreeNetRandom(void) wc_UnLockMutex(&wnr_mutex); +#ifndef WOLFSSL_MUTEX_INITIALIZER wc_FreeMutex(&wnr_mutex); - wnr_mutex_init = 0; + wnr_mutex_inited = 0; +#endif + + wnr_inited = 0; } return 0; diff --git a/wolfcrypt/src/sp_arm32.c b/wolfcrypt/src/sp_arm32.c index 2014da43d..8529e4192 100644 --- a/wolfcrypt/src/sp_arm32.c +++ b/wolfcrypt/src/sp_arm32.c @@ -74076,8 +74076,10 @@ static THREAD_LS_T int sp_cache_256_last = -1; static THREAD_LS_T int sp_cache_256_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_256 = 0; - static wolfSSL_Mutex sp_cache_256_lock; + #endif + static wolfSSL_Mutex sp_cache_256_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_256_lock); #endif /* Get the cache entry for the point. @@ -74175,10 +74177,12 @@ static int sp_256_ecc_mulmod_8(sp_point_256* r, const sp_point_256* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_256 == 0) { wc_InitMutex(&sp_cache_256_lock); initCacheMutex_256 = 1; } + #endif if (wc_LockMutex(&sp_cache_256_lock) != 0) { err = BAD_MUTEX_E; } @@ -74496,8 +74500,10 @@ static THREAD_LS_T int sp_cache_256_last = -1; static THREAD_LS_T int sp_cache_256_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_256 = 0; - static wolfSSL_Mutex sp_cache_256_lock; + #endif + static wolfSSL_Mutex sp_cache_256_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_256_lock); #endif /* Get the cache entry for the point. @@ -74595,10 +74601,12 @@ static int sp_256_ecc_mulmod_8(sp_point_256* r, const sp_point_256* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_256 == 0) { wc_InitMutex(&sp_cache_256_lock); initCacheMutex_256 = 1; } + #endif if (wc_LockMutex(&sp_cache_256_lock) != 0) { err = BAD_MUTEX_E; } @@ -91837,8 +91845,10 @@ static THREAD_LS_T int sp_cache_384_last = -1; static THREAD_LS_T int sp_cache_384_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_384 = 0; - static wolfSSL_Mutex sp_cache_384_lock; + #endif + static wolfSSL_Mutex sp_cache_384_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_384_lock); #endif /* Get the cache entry for the point. @@ -91936,10 +91946,12 @@ static int sp_384_ecc_mulmod_12(sp_point_384* r, const sp_point_384* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_384 == 0) { wc_InitMutex(&sp_cache_384_lock); initCacheMutex_384 = 1; } + #endif if (wc_LockMutex(&sp_cache_384_lock) != 0) { err = BAD_MUTEX_E; } @@ -92273,8 +92285,10 @@ static THREAD_LS_T int sp_cache_384_last = -1; static THREAD_LS_T int sp_cache_384_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_384 = 0; - static wolfSSL_Mutex sp_cache_384_lock; + #endif + static wolfSSL_Mutex sp_cache_384_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_384_lock); #endif /* Get the cache entry for the point. @@ -92372,10 +92386,12 @@ static int sp_384_ecc_mulmod_12(sp_point_384* r, const sp_point_384* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_384 == 0) { wc_InitMutex(&sp_cache_384_lock); initCacheMutex_384 = 1; } + #endif if (wc_LockMutex(&sp_cache_384_lock) != 0) { err = BAD_MUTEX_E; } @@ -119032,8 +119048,10 @@ static THREAD_LS_T int sp_cache_521_last = -1; static THREAD_LS_T int sp_cache_521_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_521 = 0; - static wolfSSL_Mutex sp_cache_521_lock; + #endif + static wolfSSL_Mutex sp_cache_521_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_521_lock); #endif /* Get the cache entry for the point. @@ -119131,10 +119149,12 @@ static int sp_521_ecc_mulmod_17(sp_point_521* r, const sp_point_521* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_521 == 0) { wc_InitMutex(&sp_cache_521_lock); initCacheMutex_521 = 1; } + #endif if (wc_LockMutex(&sp_cache_521_lock) != 0) { err = BAD_MUTEX_E; } @@ -119488,8 +119508,10 @@ static THREAD_LS_T int sp_cache_521_last = -1; static THREAD_LS_T int sp_cache_521_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_521 = 0; - static wolfSSL_Mutex sp_cache_521_lock; + #endif + static wolfSSL_Mutex sp_cache_521_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_521_lock); #endif /* Get the cache entry for the point. @@ -119587,10 +119609,12 @@ static int sp_521_ecc_mulmod_17(sp_point_521* r, const sp_point_521* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_521 == 0) { wc_InitMutex(&sp_cache_521_lock); initCacheMutex_521 = 1; } + #endif if (wc_LockMutex(&sp_cache_521_lock) != 0) { err = BAD_MUTEX_E; } @@ -148716,8 +148740,10 @@ static THREAD_LS_T int sp_cache_1024_last = -1; static THREAD_LS_T int sp_cache_1024_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_1024 = 0; - static wolfSSL_Mutex sp_cache_1024_lock; + #endif + static wolfSSL_Mutex sp_cache_1024_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_1024_lock); #endif /* Get the cache entry for the point. @@ -148815,10 +148841,12 @@ static int sp_1024_ecc_mulmod_32(sp_point_1024* r, const sp_point_1024* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_1024 == 0) { wc_InitMutex(&sp_cache_1024_lock); initCacheMutex_1024 = 1; } + #endif if (wc_LockMutex(&sp_cache_1024_lock) != 0) { err = BAD_MUTEX_E; } @@ -149071,8 +149099,10 @@ static THREAD_LS_T int sp_cache_1024_last = -1; static THREAD_LS_T int sp_cache_1024_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_1024 = 0; - static wolfSSL_Mutex sp_cache_1024_lock; + #endif + static wolfSSL_Mutex sp_cache_1024_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_1024_lock); #endif /* Get the cache entry for the point. @@ -149170,10 +149200,12 @@ static int sp_1024_ecc_mulmod_32(sp_point_1024* r, const sp_point_1024* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_1024 == 0) { wc_InitMutex(&sp_cache_1024_lock); initCacheMutex_1024 = 1; } + #endif if (wc_LockMutex(&sp_cache_1024_lock) != 0) { err = BAD_MUTEX_E; } diff --git a/wolfcrypt/src/sp_arm64.c b/wolfcrypt/src/sp_arm64.c index ed66e6d19..ea3ce3921 100644 --- a/wolfcrypt/src/sp_arm64.c +++ b/wolfcrypt/src/sp_arm64.c @@ -24939,8 +24939,10 @@ static THREAD_LS_T int sp_cache_256_last = -1; static THREAD_LS_T int sp_cache_256_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_256 = 0; - static wolfSSL_Mutex sp_cache_256_lock; + #endif + static wolfSSL_Mutex sp_cache_256_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_256_lock); #endif /* Get the cache entry for the point. @@ -25038,10 +25040,12 @@ static int sp_256_ecc_mulmod_4(sp_point_256* r, const sp_point_256* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_256 == 0) { wc_InitMutex(&sp_cache_256_lock); initCacheMutex_256 = 1; } + #endif if (wc_LockMutex(&sp_cache_256_lock) != 0) { err = BAD_MUTEX_E; } @@ -25368,8 +25372,10 @@ static THREAD_LS_T int sp_cache_256_last = -1; static THREAD_LS_T int sp_cache_256_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_256 = 0; - static wolfSSL_Mutex sp_cache_256_lock; + #endif + static wolfSSL_Mutex sp_cache_256_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_256_lock); #endif /* Get the cache entry for the point. @@ -25467,10 +25473,12 @@ static int sp_256_ecc_mulmod_4(sp_point_256* r, const sp_point_256* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_256 == 0) { wc_InitMutex(&sp_cache_256_lock); initCacheMutex_256 = 1; } + #endif if (wc_LockMutex(&sp_cache_256_lock) != 0) { err = BAD_MUTEX_E; } @@ -45888,8 +45896,10 @@ static THREAD_LS_T int sp_cache_384_last = -1; static THREAD_LS_T int sp_cache_384_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_384 = 0; - static wolfSSL_Mutex sp_cache_384_lock; + #endif + static wolfSSL_Mutex sp_cache_384_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_384_lock); #endif /* Get the cache entry for the point. @@ -45987,10 +45997,12 @@ static int sp_384_ecc_mulmod_6(sp_point_384* r, const sp_point_384* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_384 == 0) { wc_InitMutex(&sp_cache_384_lock); initCacheMutex_384 = 1; } + #endif if (wc_LockMutex(&sp_cache_384_lock) != 0) { err = BAD_MUTEX_E; } @@ -46317,8 +46329,10 @@ static THREAD_LS_T int sp_cache_384_last = -1; static THREAD_LS_T int sp_cache_384_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_384 = 0; - static wolfSSL_Mutex sp_cache_384_lock; + #endif + static wolfSSL_Mutex sp_cache_384_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_384_lock); #endif /* Get the cache entry for the point. @@ -46416,10 +46430,12 @@ static int sp_384_ecc_mulmod_6(sp_point_384* r, const sp_point_384* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_384 == 0) { wc_InitMutex(&sp_cache_384_lock); initCacheMutex_384 = 1; } + #endif if (wc_LockMutex(&sp_cache_384_lock) != 0) { err = BAD_MUTEX_E; } @@ -74312,8 +74328,10 @@ static THREAD_LS_T int sp_cache_521_last = -1; static THREAD_LS_T int sp_cache_521_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_521 = 0; - static wolfSSL_Mutex sp_cache_521_lock; + #endif + static wolfSSL_Mutex sp_cache_521_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_521_lock); #endif /* Get the cache entry for the point. @@ -74411,10 +74429,12 @@ static int sp_521_ecc_mulmod_9(sp_point_521* r, const sp_point_521* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_521 == 0) { wc_InitMutex(&sp_cache_521_lock); initCacheMutex_521 = 1; } + #endif if (wc_LockMutex(&sp_cache_521_lock) != 0) { err = BAD_MUTEX_E; } @@ -74759,8 +74779,10 @@ static THREAD_LS_T int sp_cache_521_last = -1; static THREAD_LS_T int sp_cache_521_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_521 = 0; - static wolfSSL_Mutex sp_cache_521_lock; + #endif + static wolfSSL_Mutex sp_cache_521_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_521_lock); #endif /* Get the cache entry for the point. @@ -74858,10 +74880,12 @@ static int sp_521_ecc_mulmod_9(sp_point_521* r, const sp_point_521* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_521 == 0) { wc_InitMutex(&sp_cache_521_lock); initCacheMutex_521 = 1; } + #endif if (wc_LockMutex(&sp_cache_521_lock) != 0) { err = BAD_MUTEX_E; } @@ -118234,8 +118258,10 @@ static THREAD_LS_T int sp_cache_1024_last = -1; static THREAD_LS_T int sp_cache_1024_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_1024 = 0; - static wolfSSL_Mutex sp_cache_1024_lock; + #endif + static wolfSSL_Mutex sp_cache_1024_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_1024_lock); #endif /* Get the cache entry for the point. @@ -118333,10 +118359,12 @@ static int sp_1024_ecc_mulmod_16(sp_point_1024* r, const sp_point_1024* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_1024 == 0) { wc_InitMutex(&sp_cache_1024_lock); initCacheMutex_1024 = 1; } + #endif if (wc_LockMutex(&sp_cache_1024_lock) != 0) { err = BAD_MUTEX_E; } diff --git a/wolfcrypt/src/sp_armthumb.c b/wolfcrypt/src/sp_armthumb.c index c73f69abd..c7cb418c2 100644 --- a/wolfcrypt/src/sp_armthumb.c +++ b/wolfcrypt/src/sp_armthumb.c @@ -101578,8 +101578,10 @@ static THREAD_LS_T int sp_cache_256_last = -1; static THREAD_LS_T int sp_cache_256_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_256 = 0; - static wolfSSL_Mutex sp_cache_256_lock; + #endif + static wolfSSL_Mutex sp_cache_256_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_256_lock); #endif /* Get the cache entry for the point. @@ -101677,10 +101679,12 @@ static int sp_256_ecc_mulmod_8(sp_point_256* r, const sp_point_256* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_256 == 0) { wc_InitMutex(&sp_cache_256_lock); initCacheMutex_256 = 1; } + #endif if (wc_LockMutex(&sp_cache_256_lock) != 0) { err = BAD_MUTEX_E; } @@ -101998,8 +102002,10 @@ static THREAD_LS_T int sp_cache_256_last = -1; static THREAD_LS_T int sp_cache_256_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_256 = 0; - static wolfSSL_Mutex sp_cache_256_lock; + #endif + static wolfSSL_Mutex sp_cache_256_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_256_lock); #endif /* Get the cache entry for the point. @@ -102097,10 +102103,12 @@ static int sp_256_ecc_mulmod_8(sp_point_256* r, const sp_point_256* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_256 == 0) { wc_InitMutex(&sp_cache_256_lock); initCacheMutex_256 = 1; } + #endif if (wc_LockMutex(&sp_cache_256_lock) != 0) { err = BAD_MUTEX_E; } @@ -112446,8 +112454,10 @@ static THREAD_LS_T int sp_cache_384_last = -1; static THREAD_LS_T int sp_cache_384_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_384 = 0; - static wolfSSL_Mutex sp_cache_384_lock; + #endif + static wolfSSL_Mutex sp_cache_384_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_384_lock); #endif /* Get the cache entry for the point. @@ -112545,10 +112555,12 @@ static int sp_384_ecc_mulmod_12(sp_point_384* r, const sp_point_384* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_384 == 0) { wc_InitMutex(&sp_cache_384_lock); initCacheMutex_384 = 1; } + #endif if (wc_LockMutex(&sp_cache_384_lock) != 0) { err = BAD_MUTEX_E; } @@ -112882,8 +112894,10 @@ static THREAD_LS_T int sp_cache_384_last = -1; static THREAD_LS_T int sp_cache_384_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_384 = 0; - static wolfSSL_Mutex sp_cache_384_lock; + #endif + static wolfSSL_Mutex sp_cache_384_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_384_lock); #endif /* Get the cache entry for the point. @@ -112981,10 +112995,12 @@ static int sp_384_ecc_mulmod_12(sp_point_384* r, const sp_point_384* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_384 == 0) { wc_InitMutex(&sp_cache_384_lock); initCacheMutex_384 = 1; } + #endif if (wc_LockMutex(&sp_cache_384_lock) != 0) { err = BAD_MUTEX_E; } @@ -126089,8 +126105,10 @@ static THREAD_LS_T int sp_cache_521_last = -1; static THREAD_LS_T int sp_cache_521_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_521 = 0; - static wolfSSL_Mutex sp_cache_521_lock; + #endif + static wolfSSL_Mutex sp_cache_521_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_521_lock); #endif /* Get the cache entry for the point. @@ -126188,10 +126206,12 @@ static int sp_521_ecc_mulmod_17(sp_point_521* r, const sp_point_521* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_521 == 0) { wc_InitMutex(&sp_cache_521_lock); initCacheMutex_521 = 1; } + #endif if (wc_LockMutex(&sp_cache_521_lock) != 0) { err = BAD_MUTEX_E; } @@ -126545,8 +126565,10 @@ static THREAD_LS_T int sp_cache_521_last = -1; static THREAD_LS_T int sp_cache_521_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_521 = 0; - static wolfSSL_Mutex sp_cache_521_lock; + #endif + static wolfSSL_Mutex sp_cache_521_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_521_lock); #endif /* Get the cache entry for the point. @@ -126644,10 +126666,12 @@ static int sp_521_ecc_mulmod_17(sp_point_521* r, const sp_point_521* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_521 == 0) { wc_InitMutex(&sp_cache_521_lock); initCacheMutex_521 = 1; } + #endif if (wc_LockMutex(&sp_cache_521_lock) != 0) { err = BAD_MUTEX_E; } @@ -210707,8 +210731,10 @@ static THREAD_LS_T int sp_cache_1024_last = -1; static THREAD_LS_T int sp_cache_1024_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_1024 = 0; - static wolfSSL_Mutex sp_cache_1024_lock; + #endif + static wolfSSL_Mutex sp_cache_1024_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_1024_lock); #endif /* Get the cache entry for the point. @@ -210806,10 +210832,12 @@ static int sp_1024_ecc_mulmod_32(sp_point_1024* r, const sp_point_1024* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_1024 == 0) { wc_InitMutex(&sp_cache_1024_lock); initCacheMutex_1024 = 1; } + #endif if (wc_LockMutex(&sp_cache_1024_lock) != 0) { err = BAD_MUTEX_E; } @@ -211062,8 +211090,10 @@ static THREAD_LS_T int sp_cache_1024_last = -1; static THREAD_LS_T int sp_cache_1024_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_1024 = 0; - static wolfSSL_Mutex sp_cache_1024_lock; + #endif + static wolfSSL_Mutex sp_cache_1024_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_1024_lock); #endif /* Get the cache entry for the point. @@ -211161,10 +211191,12 @@ static int sp_1024_ecc_mulmod_32(sp_point_1024* r, const sp_point_1024* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_1024 == 0) { wc_InitMutex(&sp_cache_1024_lock); initCacheMutex_1024 = 1; } + #endif if (wc_LockMutex(&sp_cache_1024_lock) != 0) { err = BAD_MUTEX_E; } diff --git a/wolfcrypt/src/sp_c32.c b/wolfcrypt/src/sp_c32.c index 468e0fcfe..21a9e0efa 100644 --- a/wolfcrypt/src/sp_c32.c +++ b/wolfcrypt/src/sp_c32.c @@ -23120,8 +23120,10 @@ static THREAD_LS_T int sp_cache_256_last = -1; static THREAD_LS_T int sp_cache_256_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_256 = 0; - static wolfSSL_Mutex sp_cache_256_lock; + #endif + static wolfSSL_Mutex sp_cache_256_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_256_lock); #endif /* Get the cache entry for the point. @@ -23219,10 +23221,12 @@ static int sp_256_ecc_mulmod_9(sp_point_256* r, const sp_point_256* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_256 == 0) { wc_InitMutex(&sp_cache_256_lock); initCacheMutex_256 = 1; } + #endif if (wc_LockMutex(&sp_cache_256_lock) != 0) { err = BAD_MUTEX_E; } @@ -30674,8 +30678,10 @@ static THREAD_LS_T int sp_cache_384_last = -1; static THREAD_LS_T int sp_cache_384_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_384 = 0; - static wolfSSL_Mutex sp_cache_384_lock; + #endif + static wolfSSL_Mutex sp_cache_384_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_384_lock); #endif /* Get the cache entry for the point. @@ -30773,10 +30779,12 @@ static int sp_384_ecc_mulmod_15(sp_point_384* r, const sp_point_384* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_384 == 0) { wc_InitMutex(&sp_cache_384_lock); initCacheMutex_384 = 1; } + #endif if (wc_LockMutex(&sp_cache_384_lock) != 0) { err = BAD_MUTEX_E; } @@ -38277,8 +38285,10 @@ static THREAD_LS_T int sp_cache_521_last = -1; static THREAD_LS_T int sp_cache_521_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_521 = 0; - static wolfSSL_Mutex sp_cache_521_lock; + #endif + static wolfSSL_Mutex sp_cache_521_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_521_lock); #endif /* Get the cache entry for the point. @@ -38376,10 +38386,12 @@ static int sp_521_ecc_mulmod_21(sp_point_521* r, const sp_point_521* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_521 == 0) { wc_InitMutex(&sp_cache_521_lock); initCacheMutex_521 = 1; } + #endif if (wc_LockMutex(&sp_cache_521_lock) != 0) { err = BAD_MUTEX_E; } @@ -46862,8 +46874,10 @@ static THREAD_LS_T int sp_cache_1024_last = -1; static THREAD_LS_T int sp_cache_1024_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_1024 = 0; - static wolfSSL_Mutex sp_cache_1024_lock; + #endif + static wolfSSL_Mutex sp_cache_1024_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_1024_lock); #endif /* Get the cache entry for the point. @@ -46961,10 +46975,12 @@ static int sp_1024_ecc_mulmod_42(sp_point_1024* r, const sp_point_1024* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_1024 == 0) { wc_InitMutex(&sp_cache_1024_lock); initCacheMutex_1024 = 1; } + #endif if (wc_LockMutex(&sp_cache_1024_lock) != 0) { err = BAD_MUTEX_E; } diff --git a/wolfcrypt/src/sp_c64.c b/wolfcrypt/src/sp_c64.c index a2b97d816..93fd140ba 100644 --- a/wolfcrypt/src/sp_c64.c +++ b/wolfcrypt/src/sp_c64.c @@ -24027,8 +24027,10 @@ static THREAD_LS_T int sp_cache_256_last = -1; static THREAD_LS_T int sp_cache_256_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_256 = 0; - static wolfSSL_Mutex sp_cache_256_lock; + #endif + static wolfSSL_Mutex sp_cache_256_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_256_lock); #endif /* Get the cache entry for the point. @@ -24126,10 +24128,12 @@ static int sp_256_ecc_mulmod_5(sp_point_256* r, const sp_point_256* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_256 == 0) { wc_InitMutex(&sp_cache_256_lock); initCacheMutex_256 = 1; } + #endif if (wc_LockMutex(&sp_cache_256_lock) != 0) { err = BAD_MUTEX_E; } @@ -31008,8 +31012,10 @@ static THREAD_LS_T int sp_cache_384_last = -1; static THREAD_LS_T int sp_cache_384_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_384 = 0; - static wolfSSL_Mutex sp_cache_384_lock; + #endif + static wolfSSL_Mutex sp_cache_384_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_384_lock); #endif /* Get the cache entry for the point. @@ -31107,10 +31113,12 @@ static int sp_384_ecc_mulmod_7(sp_point_384* r, const sp_point_384* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_384 == 0) { wc_InitMutex(&sp_cache_384_lock); initCacheMutex_384 = 1; } + #endif if (wc_LockMutex(&sp_cache_384_lock) != 0) { err = BAD_MUTEX_E; } @@ -38449,8 +38457,10 @@ static THREAD_LS_T int sp_cache_521_last = -1; static THREAD_LS_T int sp_cache_521_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_521 = 0; - static wolfSSL_Mutex sp_cache_521_lock; + #endif + static wolfSSL_Mutex sp_cache_521_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_521_lock); #endif /* Get the cache entry for the point. @@ -38548,10 +38558,12 @@ static int sp_521_ecc_mulmod_9(sp_point_521* r, const sp_point_521* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_521 == 0) { wc_InitMutex(&sp_cache_521_lock); initCacheMutex_521 = 1; } + #endif if (wc_LockMutex(&sp_cache_521_lock) != 0) { err = BAD_MUTEX_E; } @@ -46216,8 +46228,10 @@ static THREAD_LS_T int sp_cache_1024_last = -1; static THREAD_LS_T int sp_cache_1024_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_1024 = 0; - static wolfSSL_Mutex sp_cache_1024_lock; + #endif + static wolfSSL_Mutex sp_cache_1024_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_1024_lock); #endif /* Get the cache entry for the point. @@ -46315,10 +46329,12 @@ static int sp_1024_ecc_mulmod_18(sp_point_1024* r, const sp_point_1024* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_1024 == 0) { wc_InitMutex(&sp_cache_1024_lock); initCacheMutex_1024 = 1; } + #endif if (wc_LockMutex(&sp_cache_1024_lock) != 0) { err = BAD_MUTEX_E; } diff --git a/wolfcrypt/src/sp_cortexm.c b/wolfcrypt/src/sp_cortexm.c index 3ab1accbf..07a3112bb 100644 --- a/wolfcrypt/src/sp_cortexm.c +++ b/wolfcrypt/src/sp_cortexm.c @@ -36403,8 +36403,10 @@ static THREAD_LS_T int sp_cache_256_last = -1; static THREAD_LS_T int sp_cache_256_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_256 = 0; - static wolfSSL_Mutex sp_cache_256_lock; + #endif + static wolfSSL_Mutex sp_cache_256_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_256_lock); #endif /* Get the cache entry for the point. @@ -36502,10 +36504,12 @@ static int sp_256_ecc_mulmod_8(sp_point_256* r, const sp_point_256* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_256 == 0) { wc_InitMutex(&sp_cache_256_lock); initCacheMutex_256 = 1; } + #endif if (wc_LockMutex(&sp_cache_256_lock) != 0) { err = BAD_MUTEX_E; } @@ -36823,8 +36827,10 @@ static THREAD_LS_T int sp_cache_256_last = -1; static THREAD_LS_T int sp_cache_256_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_256 = 0; - static wolfSSL_Mutex sp_cache_256_lock; + #endif + static wolfSSL_Mutex sp_cache_256_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_256_lock); #endif /* Get the cache entry for the point. @@ -36922,10 +36928,12 @@ static int sp_256_ecc_mulmod_8(sp_point_256* r, const sp_point_256* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_256 == 0) { wc_InitMutex(&sp_cache_256_lock); initCacheMutex_256 = 1; } + #endif if (wc_LockMutex(&sp_cache_256_lock) != 0) { err = BAD_MUTEX_E; } @@ -46272,8 +46280,10 @@ static THREAD_LS_T int sp_cache_384_last = -1; static THREAD_LS_T int sp_cache_384_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_384 = 0; - static wolfSSL_Mutex sp_cache_384_lock; + #endif + static wolfSSL_Mutex sp_cache_384_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_384_lock); #endif /* Get the cache entry for the point. @@ -46371,10 +46381,12 @@ static int sp_384_ecc_mulmod_12(sp_point_384* r, const sp_point_384* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_384 == 0) { wc_InitMutex(&sp_cache_384_lock); initCacheMutex_384 = 1; } + #endif if (wc_LockMutex(&sp_cache_384_lock) != 0) { err = BAD_MUTEX_E; } @@ -46708,8 +46720,10 @@ static THREAD_LS_T int sp_cache_384_last = -1; static THREAD_LS_T int sp_cache_384_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_384 = 0; - static wolfSSL_Mutex sp_cache_384_lock; + #endif + static wolfSSL_Mutex sp_cache_384_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_384_lock); #endif /* Get the cache entry for the point. @@ -46807,10 +46821,12 @@ static int sp_384_ecc_mulmod_12(sp_point_384* r, const sp_point_384* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_384 == 0) { wc_InitMutex(&sp_cache_384_lock); initCacheMutex_384 = 1; } + #endif if (wc_LockMutex(&sp_cache_384_lock) != 0) { err = BAD_MUTEX_E; } @@ -58262,8 +58278,10 @@ static THREAD_LS_T int sp_cache_521_last = -1; static THREAD_LS_T int sp_cache_521_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_521 = 0; - static wolfSSL_Mutex sp_cache_521_lock; + #endif + static wolfSSL_Mutex sp_cache_521_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_521_lock); #endif /* Get the cache entry for the point. @@ -58361,10 +58379,12 @@ static int sp_521_ecc_mulmod_17(sp_point_521* r, const sp_point_521* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_521 == 0) { wc_InitMutex(&sp_cache_521_lock); initCacheMutex_521 = 1; } + #endif if (wc_LockMutex(&sp_cache_521_lock) != 0) { err = BAD_MUTEX_E; } @@ -58718,8 +58738,10 @@ static THREAD_LS_T int sp_cache_521_last = -1; static THREAD_LS_T int sp_cache_521_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_521 = 0; - static wolfSSL_Mutex sp_cache_521_lock; + #endif + static wolfSSL_Mutex sp_cache_521_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_521_lock); #endif /* Get the cache entry for the point. @@ -58817,10 +58839,12 @@ static int sp_521_ecc_mulmod_17(sp_point_521* r, const sp_point_521* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_521 == 0) { wc_InitMutex(&sp_cache_521_lock); initCacheMutex_521 = 1; } + #endif if (wc_LockMutex(&sp_cache_521_lock) != 0) { err = BAD_MUTEX_E; } @@ -72587,8 +72611,10 @@ static THREAD_LS_T int sp_cache_1024_last = -1; static THREAD_LS_T int sp_cache_1024_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_1024 = 0; - static wolfSSL_Mutex sp_cache_1024_lock; + #endif + static wolfSSL_Mutex sp_cache_1024_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_1024_lock); #endif /* Get the cache entry for the point. @@ -72686,10 +72712,12 @@ static int sp_1024_ecc_mulmod_32(sp_point_1024* r, const sp_point_1024* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_1024 == 0) { wc_InitMutex(&sp_cache_1024_lock); initCacheMutex_1024 = 1; } + #endif if (wc_LockMutex(&sp_cache_1024_lock) != 0) { err = BAD_MUTEX_E; } @@ -72942,8 +72970,10 @@ static THREAD_LS_T int sp_cache_1024_last = -1; static THREAD_LS_T int sp_cache_1024_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_1024 = 0; - static wolfSSL_Mutex sp_cache_1024_lock; + #endif + static wolfSSL_Mutex sp_cache_1024_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_1024_lock); #endif /* Get the cache entry for the point. @@ -73041,10 +73071,12 @@ static int sp_1024_ecc_mulmod_32(sp_point_1024* r, const sp_point_1024* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_1024 == 0) { wc_InitMutex(&sp_cache_1024_lock); initCacheMutex_1024 = 1; } + #endif if (wc_LockMutex(&sp_cache_1024_lock) != 0) { err = BAD_MUTEX_E; } diff --git a/wolfcrypt/src/sp_dsp32.c b/wolfcrypt/src/sp_dsp32.c index fd7b88c42..d3b1745df 100644 --- a/wolfcrypt/src/sp_dsp32.c +++ b/wolfcrypt/src/sp_dsp32.c @@ -2620,8 +2620,10 @@ static THREAD_LS_T int sp_cache_last = -1; static THREAD_LS_T int sp_cache_inited = 0; #ifndef HAVE_THREAD_LS + static wolfSSL_Mutex sp_cache_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_lock); +#ifdef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex = 0; - static wolfSSL_Mutex sp_cache_lock; +#endif #endif static void sp_ecc_get_cache(const sp_point* g, sp_cache_t** cache) @@ -2701,10 +2703,12 @@ static int sp_256_ecc_mulmod_10(sp_point* r, const sp_point* g, const sp_digit* int err = MP_OKAY; #ifndef HAVE_THREAD_LS +#ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex == 0) { wc_InitMutex(&sp_cache_lock); initCacheMutex = 1; } +#endif if (wc_LockMutex(&sp_cache_lock) != 0) err = BAD_MUTEX_E; #endif /* HAVE_THREAD_LS */ diff --git a/wolfcrypt/src/sp_x86_64.c b/wolfcrypt/src/sp_x86_64.c index 990a999cb..b57f5a3a3 100644 --- a/wolfcrypt/src/sp_x86_64.c +++ b/wolfcrypt/src/sp_x86_64.c @@ -10979,8 +10979,10 @@ static THREAD_LS_T int sp_cache_256_last = -1; static THREAD_LS_T int sp_cache_256_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_256 = 0; - static wolfSSL_Mutex sp_cache_256_lock; + #endif + static wolfSSL_Mutex sp_cache_256_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_256_lock); #endif /* Get the cache entry for the point. @@ -11078,10 +11080,12 @@ static int sp_256_ecc_mulmod_4(sp_point_256* r, const sp_point_256* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_256 == 0) { wc_InitMutex(&sp_cache_256_lock); initCacheMutex_256 = 1; } + #endif if (wc_LockMutex(&sp_cache_256_lock) != 0) { err = BAD_MUTEX_E; } @@ -11459,10 +11463,12 @@ static int sp_256_ecc_mulmod_avx2_4(sp_point_256* r, const sp_point_256* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_256 == 0) { wc_InitMutex(&sp_cache_256_lock); initCacheMutex_256 = 1; } + #endif if (wc_LockMutex(&sp_cache_256_lock) != 0) { err = BAD_MUTEX_E; } @@ -30167,8 +30173,10 @@ static THREAD_LS_T int sp_cache_384_last = -1; static THREAD_LS_T int sp_cache_384_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_384 = 0; - static wolfSSL_Mutex sp_cache_384_lock; + #endif + static wolfSSL_Mutex sp_cache_384_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_384_lock); #endif /* Get the cache entry for the point. @@ -30266,10 +30274,12 @@ static int sp_384_ecc_mulmod_6(sp_point_384* r, const sp_point_384* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_384 == 0) { wc_InitMutex(&sp_cache_384_lock); initCacheMutex_384 = 1; } + #endif if (wc_LockMutex(&sp_cache_384_lock) != 0) { err = BAD_MUTEX_E; } @@ -30650,10 +30660,12 @@ static int sp_384_ecc_mulmod_avx2_6(sp_point_384* r, const sp_point_384* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_384 == 0) { wc_InitMutex(&sp_cache_384_lock); initCacheMutex_384 = 1; } + #endif if (wc_LockMutex(&sp_cache_384_lock) != 0) { err = BAD_MUTEX_E; } @@ -55045,8 +55057,10 @@ static THREAD_LS_T int sp_cache_521_last = -1; static THREAD_LS_T int sp_cache_521_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_521 = 0; - static wolfSSL_Mutex sp_cache_521_lock; + #endif + static wolfSSL_Mutex sp_cache_521_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_521_lock); #endif /* Get the cache entry for the point. @@ -55144,10 +55158,12 @@ static int sp_521_ecc_mulmod_9(sp_point_521* r, const sp_point_521* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_521 == 0) { wc_InitMutex(&sp_cache_521_lock); initCacheMutex_521 = 1; } + #endif if (wc_LockMutex(&sp_cache_521_lock) != 0) { err = BAD_MUTEX_E; } @@ -55528,10 +55544,12 @@ static int sp_521_ecc_mulmod_avx2_9(sp_point_521* r, const sp_point_521* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_521 == 0) { wc_InitMutex(&sp_cache_521_lock); initCacheMutex_521 = 1; } + #endif if (wc_LockMutex(&sp_cache_521_lock) != 0) { err = BAD_MUTEX_E; } @@ -96245,8 +96263,10 @@ static THREAD_LS_T int sp_cache_1024_last = -1; static THREAD_LS_T int sp_cache_1024_inited = 0; #ifndef HAVE_THREAD_LS + #ifndef WOLFSSL_MUTEX_INITIALIZER static volatile int initCacheMutex_1024 = 0; - static wolfSSL_Mutex sp_cache_1024_lock; + #endif + static wolfSSL_Mutex sp_cache_1024_lock WOLFSSL_MUTEX_INITIALIZER_CLAUSE(sp_cache_1024_lock); #endif /* Get the cache entry for the point. @@ -96344,10 +96364,12 @@ static int sp_1024_ecc_mulmod_16(sp_point_1024* r, const sp_point_1024* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_1024 == 0) { wc_InitMutex(&sp_cache_1024_lock); initCacheMutex_1024 = 1; } + #endif if (wc_LockMutex(&sp_cache_1024_lock) != 0) { err = BAD_MUTEX_E; } @@ -96711,10 +96733,12 @@ static int sp_1024_ecc_mulmod_avx2_16(sp_point_1024* r, const sp_point_1024* g, #endif #ifndef HAVE_THREAD_LS if (err == MP_OKAY) { + #ifndef WOLFSSL_MUTEX_INITIALIZER if (initCacheMutex_1024 == 0) { wc_InitMutex(&sp_cache_1024_lock); initCacheMutex_1024 = 1; } + #endif if (wc_LockMutex(&sp_cache_1024_lock) != 0) { err = BAD_MUTEX_E; } diff --git a/wolfcrypt/src/wc_dsp.c b/wolfcrypt/src/wc_dsp.c index 95dfed643..c31c62b15 100644 --- a/wolfcrypt/src/wc_dsp.c +++ b/wolfcrypt/src/wc_dsp.c @@ -38,7 +38,7 @@ #include "rpcmem.h" static wolfSSL_DSP_Handle_cb handle_function = NULL; static remote_handle64 defaultHandle; -static wolfSSL_Mutex handle_mutex; /* mutex for access to single default handle */ +static wolfSSL_Mutex handle_mutex WOLFSSL_MUTEX_INITIALIZER_CLAUSE(handle_mutex); /* mutex for access to single default handle */ #define WOLFSSL_HANDLE_DONE 1 #define WOLFSSL_HANDLE_GET 0 @@ -95,11 +95,13 @@ int wolfSSL_InitHandle() return -1; } wolfSSL_SetHandleCb(default_handle_cb); +#ifndef WOLFSSL_MUTEX_INITIALIZER ret = wc_InitMutex(&handle_mutex); if (ret != 0) { WOLFSSL_MSG("Unable to init handle mutex"); return -1; } +#endif return 0; } @@ -108,7 +110,9 @@ int wolfSSL_InitHandle() void wolfSSL_CleanupHandle() { wolfSSL_close(defaultHandle); +#ifndef WOLFSSL_MUTEX_INITIALIZER wc_FreeMutex(&handle_mutex); +#endif } #if defined(WOLFSSL_HAVE_SP_ECC) diff --git a/wolfcrypt/src/wc_port.c b/wolfcrypt/src/wc_port.c index 8cb8a0c18..a21cc2b9d 100644 --- a/wolfcrypt/src/wc_port.c +++ b/wolfcrypt/src/wc_port.c @@ -1283,18 +1283,22 @@ void wolfSSL_RefDec(wolfSSL_Ref* ref, int* isZero, int* err) #if WOLFSSL_CRYPT_HW_MUTEX /* Mutex for protection of cryptography hardware */ -static wolfSSL_Mutex wcCryptHwMutex; +static wolfSSL_Mutex wcCryptHwMutex WOLFSSL_MUTEX_INITIALIZER_CLAUSE(wcCryptHwMutex); +#ifndef WOLFSSL_MUTEX_INITIALIZER static int wcCryptHwMutexInit = 0; +#endif int wolfSSL_CryptHwMutexInit(void) { int ret = 0; +#ifndef WOLFSSL_MUTEX_INITIALIZER if (wcCryptHwMutexInit == 0) { ret = wc_InitMutex(&wcCryptHwMutex); if (ret == 0) { wcCryptHwMutexInit = 1; } } +#endif return ret; } int wolfSSL_CryptHwMutexLock(void) diff --git a/wolfssl/wolfcrypt/wc_port.h b/wolfssl/wolfcrypt/wc_port.h index c4ded9c14..bf5ef6b30 100644 --- a/wolfssl/wolfcrypt/wc_port.h +++ b/wolfssl/wolfcrypt/wc_port.h @@ -244,7 +244,7 @@ typedef pthread_rwlock_t wolfSSL_RwLock; #endif typedef pthread_mutex_t wolfSSL_Mutex; - #define WOLFSSL_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER + #define WOLFSSL_MUTEX_INITIALIZER(lockname) PTHREAD_MUTEX_INITIALIZER #elif defined(THREADX) typedef TX_MUTEX wolfSSL_Mutex; #elif defined(WOLFSSL_DEOS) @@ -306,6 +306,13 @@ #endif /* USE_WINDOWS_API */ #endif /* SINGLE_THREADED */ + +#ifdef WOLFSSL_MUTEX_INITIALIZER + #define WOLFSSL_MUTEX_INITIALIZER_CLAUSE(lockname) = WOLFSSL_MUTEX_INITIALIZER(lockname) +#else + #define WOLFSSL_MUTEX_INITIALIZER_CLAUSE(lockname) /* null expansion */ +#endif + #if !defined(WOLFSSL_USE_RWLOCK) || defined(SINGLE_THREADED) typedef wolfSSL_Mutex wolfSSL_RwLock; #endif