forked from wolfSSL/wolfssl
free ctx in case of InitMutex fail
This commit is contained in:
@ -1376,6 +1376,7 @@ int InitSSL_Ctx(WOLFSSL_CTX* ctx, WOLFSSL_METHOD* method, void* heap)
|
|||||||
|
|
||||||
if (InitMutex(&ctx->countMutex) < 0) {
|
if (InitMutex(&ctx->countMutex) < 0) {
|
||||||
WOLFSSL_MSG("Mutex error on CTX init");
|
WOLFSSL_MSG("Mutex error on CTX init");
|
||||||
|
ctx->err = (int)CTX_INIT_MUTEX_E;
|
||||||
return BAD_MUTEX_E;
|
return BAD_MUTEX_E;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1537,6 +1538,13 @@ void FreeSSL_Ctx(WOLFSSL_CTX* ctx)
|
|||||||
|
|
||||||
if (LockMutex(&ctx->countMutex) != 0) {
|
if (LockMutex(&ctx->countMutex) != 0) {
|
||||||
WOLFSSL_MSG("Couldn't lock count mutex");
|
WOLFSSL_MSG("Couldn't lock count mutex");
|
||||||
|
|
||||||
|
/* check error state, if mutex error code then mutex init failed but
|
||||||
|
* CTX was still malloc'd */
|
||||||
|
if (ctx->err == (int)CTX_INIT_MUTEX_E) {
|
||||||
|
SSL_CtxResourceFree(ctx);
|
||||||
|
XFREE(ctx, ctx->heap, DYNAMIC_TYPE_CTX);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ctx->refCount--;
|
ctx->refCount--;
|
||||||
@ -11344,6 +11352,9 @@ const char* wolfSSL_ERR_reason_error_string(unsigned long e)
|
|||||||
case INPUT_SIZE_E:
|
case INPUT_SIZE_E:
|
||||||
return "Input size too large Error";
|
return "Input size too large Error";
|
||||||
|
|
||||||
|
case CTX_INIT_MUTEX_E:
|
||||||
|
return "Initialize ctx mutex error";
|
||||||
|
|
||||||
default :
|
default :
|
||||||
return "unknown error number";
|
return "unknown error number";
|
||||||
}
|
}
|
||||||
|
@ -149,6 +149,7 @@ enum wolfSSL_ErrorCodes {
|
|||||||
|
|
||||||
DTLS_EXPORT_VER_E = -411, /* export version error */
|
DTLS_EXPORT_VER_E = -411, /* export version error */
|
||||||
INPUT_SIZE_E = -412, /* input size too big error */
|
INPUT_SIZE_E = -412, /* input size too big error */
|
||||||
|
CTX_INIT_MUTEX_E = -413, /* initialize ctx mutex error */
|
||||||
/* add strings to wolfSSL_ERR_reason_error_string in internal.c !!!!! */
|
/* add strings to wolfSSL_ERR_reason_error_string in internal.c !!!!! */
|
||||||
|
|
||||||
/* begin negotiation parameter errors */
|
/* begin negotiation parameter errors */
|
||||||
|
@ -1922,6 +1922,7 @@ struct WOLFSSL_CTX {
|
|||||||
WOLFSSL_METHOD* method;
|
WOLFSSL_METHOD* method;
|
||||||
wolfSSL_Mutex countMutex; /* reference count mutex */
|
wolfSSL_Mutex countMutex; /* reference count mutex */
|
||||||
int refCount; /* reference count */
|
int refCount; /* reference count */
|
||||||
|
int err; /* error code in case of mutex not created */
|
||||||
#ifndef NO_DH
|
#ifndef NO_DH
|
||||||
buffer serverDH_P;
|
buffer serverDH_P;
|
||||||
buffer serverDH_G;
|
buffer serverDH_G;
|
||||||
|
Reference in New Issue
Block a user