Merge pull request #6383 from philljj/zd16072

Fix session ticket leak in wolfSSL_Cleanup
This commit is contained in:
David Garske
2023-05-19 09:14:07 -07:00
committed by GitHub

View File

@ -14356,12 +14356,9 @@ int wolfSSL_Cleanup(void)
{ {
int ret = WOLFSSL_SUCCESS; /* Only the first error will be returned */ int ret = WOLFSSL_SUCCESS; /* Only the first error will be returned */
int release = 0; int release = 0;
#if !defined(NO_SESSION_CACHE) && (defined(ENABLE_SESSION_CACHE_ROW_LOCK) || \ #if !defined(NO_SESSION_CACHE)
defined(SESSION_CACHE_DYNAMIC_MEM))
int i; int i;
#ifdef SESSION_CACHE_DYNAMIC_MEM
int j; int j;
#endif
#endif #endif
WOLFSSL_ENTER("wolfSSL_Cleanup"); WOLFSSL_ENTER("wolfSSL_Cleanup");
@ -14406,17 +14403,20 @@ int wolfSSL_Cleanup(void)
} }
session_lock_valid = 0; session_lock_valid = 0;
#endif #endif
#ifdef SESSION_CACHE_DYNAMIC_MEM
for (i = 0; i < SESSION_ROWS; i++) { for (i = 0; i < SESSION_ROWS; i++) {
for (j = 0; j < SESSIONS_PER_ROW; j++) { for (j = 0; j < SESSIONS_PER_ROW; j++) {
#ifdef SESSION_CACHE_DYNAMIC_MEM
if (SessionCache[i].Sessions[j]) { if (SessionCache[i].Sessions[j]) {
EvictSessionFromCache(SessionCache[i].Sessions[j]);
XFREE(SessionCache[i].Sessions[j], SessionCache[i].heap, XFREE(SessionCache[i].Sessions[j], SessionCache[i].heap,
DYNAMIC_TYPE_SESSION); DYNAMIC_TYPE_SESSION);
SessionCache[i].Sessions[j] = NULL; SessionCache[i].Sessions[j] = NULL;
} }
#else
EvictSessionFromCache(&SessionCache[i].Sessions[j]);
#endif
} }
} }
#endif
#ifndef NO_CLIENT_CACHE #ifndef NO_CLIENT_CACHE
if ((clisession_mutex_valid == 1) && if ((clisession_mutex_valid == 1) &&
(wc_FreeMutex(&clisession_mutex) != 0)) { (wc_FreeMutex(&clisession_mutex) != 0)) {
@ -21457,8 +21457,8 @@ static int wolfSSL_DupSessionEx(const WOLFSSL_SESSION* input,
* the static buffer. */ * the static buffer. */
if (ticBuff != NULL) { if (ticBuff != NULL) {
if (ticLenAlloc >= input->ticketLen) { if (ticLenAlloc >= input->ticketLen) {
output->ticket = output->staticTicket; output->ticket = ticBuff;
output->ticketLenAlloc = 0; output->ticketLenAlloc = ticLenAlloc;
} }
else { else {
WOLFSSL_MSG("ticket dynamic buffer too small but we are " WOLFSSL_MSG("ticket dynamic buffer too small but we are "