mirror of https://github.com/wolfSSL/wolfssl.git
Merge pull request #3562 from SparkiDev/session_mutex
SESSION mutex: copying a session overwrote mutexpull/3544/head
commit
f362c6ecf5
35
src/ssl.c
35
src/ssl.c
|
@ -19893,8 +19893,9 @@ int wolfSSL_session_reused(WOLFSSL* ssl)
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(OPENSSL_EXTRA) || defined(HAVE_EXT_CACHE)
|
#if defined(OPENSSL_EXTRA) || defined(HAVE_EXT_CACHE)
|
||||||
|
|
||||||
/* return a new malloc'd session with default settings on success */
|
/* return a new malloc'd session with default settings on success */
|
||||||
WOLFSSL_SESSION* wolfSSL_SESSION_new(void)
|
static WOLFSSL_SESSION* NewSession(void)
|
||||||
{
|
{
|
||||||
WOLFSSL_SESSION* ret = NULL;
|
WOLFSSL_SESSION* ret = NULL;
|
||||||
|
|
||||||
|
@ -19902,18 +19903,27 @@ WOLFSSL_SESSION* wolfSSL_SESSION_new(void)
|
||||||
DYNAMIC_TYPE_OPENSSL);
|
DYNAMIC_TYPE_OPENSSL);
|
||||||
if (ret != NULL) {
|
if (ret != NULL) {
|
||||||
XMEMSET(ret, 0, sizeof(WOLFSSL_SESSION));
|
XMEMSET(ret, 0, sizeof(WOLFSSL_SESSION));
|
||||||
#ifdef OPENSSL_EXTRA
|
|
||||||
if (wc_InitMutex(&ret->refMutex) != 0) {
|
|
||||||
WOLFSSL_MSG("Error setting up session reference mutex");
|
|
||||||
XFREE(ret, NULL, DYNAMIC_TYPE_OPENSSL);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
ret->isAlloced = 1;
|
ret->isAlloced = 1;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WOLFSSL_SESSION* wolfSSL_SESSION_new(void)
|
||||||
|
{
|
||||||
|
WOLFSSL_SESSION* ret = NewSession();
|
||||||
|
|
||||||
|
if (ret != NULL) {
|
||||||
|
#ifdef OPENSSL_EXTRA
|
||||||
|
if (wc_InitMutex(&ret->refMutex) != 0) {
|
||||||
|
WOLFSSL_MSG("Error setting up session reference mutex");
|
||||||
|
XFREE(ret, NULL, DYNAMIC_TYPE_OPENSSL);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/* add one to session reference count
|
/* add one to session reference count
|
||||||
* return WOFLSSL_SUCCESS on success and WOLFSSL_FAILURE on error */
|
* return WOFLSSL_SUCCESS on success and WOLFSSL_FAILURE on error */
|
||||||
|
@ -19949,10 +19959,17 @@ WOLFSSL_SESSION* wolfSSL_SESSION_dup(WOLFSSL_SESSION* session)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
copy = wolfSSL_SESSION_new();
|
copy = NewSession();
|
||||||
if (copy != NULL) {
|
if (copy != NULL) {
|
||||||
XMEMCPY(copy, session, sizeof(WOLFSSL_SESSION));
|
XMEMCPY(copy, session, sizeof(WOLFSSL_SESSION));
|
||||||
copy->isAlloced = 1;
|
copy->isAlloced = 1;
|
||||||
|
#ifdef OPENSSL_EXTRA
|
||||||
|
if (wc_InitMutex(©->refMutex) != 0) {
|
||||||
|
WOLFSSL_MSG("Error setting up session reference mutex");
|
||||||
|
XFREE(copy, NULL, DYNAMIC_TYPE_OPENSSL);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#ifdef HAVE_SESSION_TICKET
|
#ifdef HAVE_SESSION_TICKET
|
||||||
if (session->isDynamic) {
|
if (session->isDynamic) {
|
||||||
copy->ticket = (byte*)XMALLOC(session->ticketLen, NULL,
|
copy->ticket = (byte*)XMALLOC(session->ticketLen, NULL,
|
||||||
|
|
Loading…
Reference in New Issue