Merge pull request #3669 from embhorn/gh3657

Protect use of globalRNG
This commit is contained in:
David Garske
2021-01-21 14:09:59 -08:00
committed by GitHub

View File

@@ -30943,6 +30943,7 @@ int wolfSSL_RAND_bytes(unsigned char* buf, int num)
#else #else
WC_RNG tmpRNG[1]; WC_RNG tmpRNG[1];
#endif #endif
int used_global = 0;
WOLFSSL_ENTER("wolfSSL_RAND_bytes"); WOLFSSL_ENTER("wolfSSL_RAND_bytes");
@@ -30952,8 +30953,15 @@ int wolfSSL_RAND_bytes(unsigned char* buf, int num)
return ret; return ret;
#endif #endif
if (initGlobalRNG) if (initGlobalRNG) {
if (wc_LockMutex(&globalRNGMutex) != 0) {
WOLFSSL_MSG("Bad Lock Mutex rng");
return ret;
}
rng = &globalRNG; rng = &globalRNG;
used_global = 1;
}
else if(wc_InitRng(tmpRNG) == 0) { else if(wc_InitRng(tmpRNG) == 0) {
rng = tmpRNG; rng = tmpRNG;
initTmpRng = 1; initTmpRng = 1;
@@ -30965,6 +30973,10 @@ int wolfSSL_RAND_bytes(unsigned char* buf, int num)
ret = WOLFSSL_SUCCESS; ret = WOLFSSL_SUCCESS;
} }
if (used_global == 1) {
wc_UnLockMutex(&globalRNGMutex);
}
if (initTmpRng) if (initTmpRng)
wc_FreeRng(tmpRNG); wc_FreeRng(tmpRNG);