addressed jenkins failure

fix missing mutex initialization
This commit is contained in:
Hideki Miyazaki
2021-03-09 11:54:48 +09:00
parent a13784abe1
commit 2d79578eda
3 changed files with 34 additions and 18 deletions

View File

@ -1828,6 +1828,11 @@ int InitSSL_Ctx(WOLFSSL_CTX* ctx, WOLFSSL_METHOD* method, void* heap)
return MEMORY_E; return MEMORY_E;
} }
XMEMSET(ctx->x509_store.lookup.dirs, 0, sizeof(WOLFSSL_BY_DIR)); XMEMSET(ctx->x509_store.lookup.dirs, 0, sizeof(WOLFSSL_BY_DIR));
if (wc_InitMutex(&ctx->x509_store.lookup.dirs->lock) != 0) {
WOLFSSL_MSG("Bad mutex init");
XFREE(ctx->x509_store.lookup.dirs, heap, DYNAMIC_TYPE_OPENSSL);
return BAD_MUTEX_E;
}
#endif #endif
#endif #endif
@ -10653,7 +10658,8 @@ int LoadCrlCertByIssuer(WOLFSSL_X509_STORE* store, X509_NAME* issuer, int type)
return MEMORY_E; return MEMORY_E;
} }
if (type == X509_LU_CRL && entry->hashes != NULL) { if (type == X509_LU_CRL && entry->hashes != NULL &&
wolfSSL_sk_BY_DIR_HASH_num(entry->hashes) > 0) {
/* lock the list */ /* lock the list */
if (wc_LockMutex(&lookup->dirs->lock) != 0) { if (wc_LockMutex(&lookup->dirs->lock) != 0) {
WOLFSSL_MSG("wc_LockMutex cdir Lock error"); WOLFSSL_MSG("wc_LockMutex cdir Lock error");
@ -10696,7 +10702,6 @@ int LoadCrlCertByIssuer(WOLFSSL_X509_STORE* store, X509_NAME* issuer, int type)
else if (type == X509_LU_CRL) { else if (type == X509_LU_CRL) {
ret = wolfSSL_X509_load_crl_file(&store->lookup, filename, ret = wolfSSL_X509_load_crl_file(&store->lookup, filename,
WOLFSSL_FILETYPE_PEM); WOLFSSL_FILETYPE_PEM);
printf("return load crl file %d\n", ret);
if (ret != WOLFSSL_SUCCESS) { if (ret != WOLFSSL_SUCCESS) {
WOLFSSL_MSG("failed to load CRL\n"); WOLFSSL_MSG("failed to load CRL\n");
break; break;
@ -10713,24 +10718,29 @@ int LoadCrlCertByIssuer(WOLFSSL_X509_STORE* store, X509_NAME* issuer, int type)
break; break;
} }
if (type == X509_LU_CRL) { if (suffix == MAX_SUFFIX) {
if (wc_LockMutex(&lookup->dirs->lock) != 0) { WOLFSSL_MSG("not found file");
WOLFSSL_MSG("wc_LockMutex cdir Lock error"); ret = WOLFSSL_FAILURE;
return BAD_MUTEX_E; } else {
} if (type == X509_LU_CRL) {
if (ph == NULL) { if (wc_LockMutex(&lookup->dirs->lock) != 0) {
ph = wolfSSL_BY_DIR_HASH_new(); WOLFSSL_MSG("wc_LockMutex cdir Lock error");
if (ph == NULL) { return BAD_MUTEX_E;
WOLFSSL_MSG("failed to allocate hash stack");
ret = WOLFSSL_FAILURE;
} else {
ph->hash_value = hash;
ph->last_suffix = suffix;
ret = wolfSSL_sk_BY_DIR_HASH_push(entry->hashes, ph);
} }
if (ph == NULL) {
ph = wolfSSL_BY_DIR_HASH_new();
if (ph == NULL) {
WOLFSSL_MSG("failed to allocate hash stack");
ret = WOLFSSL_FAILURE;
} else {
ph->hash_value = hash;
ph->last_suffix = suffix;
ret = wolfSSL_sk_BY_DIR_HASH_push(entry->hashes, ph);
}
}
wc_UnLockMutex(&lookup->dirs->lock);
} }
wc_UnLockMutex(&lookup->dirs->lock);
} }
XFREE(filename, NULL, DYNAMIC_TYPE_OPENSSL); XFREE(filename, NULL, DYNAMIC_TYPE_OPENSSL);

View File

@ -25858,6 +25858,10 @@ WOLFSSL_X509_STORE* wolfSSL_X509_STORE_new(void)
goto err_exit; goto err_exit;
} }
XMEMSET(store->lookup.dirs, 0, sizeof(WOLFSSL_BY_DIR)); XMEMSET(store->lookup.dirs, 0, sizeof(WOLFSSL_BY_DIR));
if (wc_InitMutex(&store->lookup.dirs->lock) != 0) {
WOLFSSL_MSG("Bad mutex init");
goto err_exit;
}
#endif #endif
return store; return store;

View File

@ -679,6 +679,7 @@ WOLFSSL_API int wolfCrypt_Cleanup(void);
#if !defined(NO_WOLFSSL_DIR)\ #if !defined(NO_WOLFSSL_DIR)\
&& !defined(WOLFSSL_NUCLEUS) && !defined(WOLFSSL_NUCLEUS_1_2) && !defined(WOLFSSL_NUCLEUS) && !defined(WOLFSSL_NUCLEUS_1_2)
#if defined(USE_WINDOWS_API) #if defined(USE_WINDOWS_API)
#include <sys/stat.h>
#define XSTAT _stat #define XSTAT _stat
#define SEPARATOR_CHAR ';' #define SEPARATOR_CHAR ';'
#elif defined(WOLFSSL_ZEPHYR) #elif defined(WOLFSSL_ZEPHYR)
@ -730,6 +731,7 @@ WOLFSSL_API int wolfCrypt_Cleanup(void);
#ifdef USE_WINDOWS_API #ifdef USE_WINDOWS_API
WIN32_FIND_DATAA FindFileData; WIN32_FIND_DATAA FindFileData;
HANDLE hFind; HANDLE hFind;
struct XSTAT s;
#elif defined(WOLFSSL_ZEPHYR) #elif defined(WOLFSSL_ZEPHYR)
struct fs_dirent entry; struct fs_dirent entry;
struct fs_dir_t dir; struct fs_dir_t dir;