From 664d2190ba94b9400d4741d4040ee14bbe747012 Mon Sep 17 00:00:00 2001 From: Jacob Barthelmeh Date: Wed, 8 Jun 2016 10:50:20 -0600 Subject: [PATCH] session ticket extension fix with static memory heap hint --- src/internal.c | 6 +++--- src/ssl.c | 4 ++-- src/tls.c | 18 +++++++++++------- wolfssl/internal.h | 4 ++-- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/internal.c b/src/internal.c index 8b80e79f4..d949eccd5 100755 --- a/src/internal.c +++ b/src/internal.c @@ -12438,11 +12438,11 @@ static void PickHashSigAlgo(WOLFSSL* ssl, if (ssl->options.resuming && ssl->session.ticketLen > 0) { SessionTicket* ticket; - ticket = TLSX_SessionTicket_Create(0, - ssl->session.ticket, ssl->session.ticketLen); + ticket = TLSX_SessionTicket_Create(0, ssl->session.ticket, + ssl->session.ticketLen, ssl->heap); if (ticket == NULL) return MEMORY_E; - ret = TLSX_UseSessionTicket(&ssl->extensions, ticket); + ret = TLSX_UseSessionTicket(&ssl->extensions, ticket, ssl->heap); if (ret != SSL_SUCCESS) return ret; idSz = 0; diff --git a/src/ssl.c b/src/ssl.c index ed7d0973c..ba6b69b35 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -1555,7 +1555,7 @@ int wolfSSL_UseSessionTicket(WOLFSSL* ssl) if (ssl == NULL) return BAD_FUNC_ARG; - return TLSX_UseSessionTicket(&ssl->extensions, NULL); + return TLSX_UseSessionTicket(&ssl->extensions, NULL, ssl->heap); } int wolfSSL_CTX_UseSessionTicket(WOLFSSL_CTX* ctx) @@ -1563,7 +1563,7 @@ int wolfSSL_CTX_UseSessionTicket(WOLFSSL_CTX* ctx) if (ctx == NULL) return BAD_FUNC_ARG; - return TLSX_UseSessionTicket(&ctx->extensions, NULL); + return TLSX_UseSessionTicket(&ctx->extensions, NULL, ctx->heap); } WOLFSSL_API int wolfSSL_get_SessionTicket(WOLFSSL* ssl, diff --git a/src/tls.c b/src/tls.c index a0dc15b1a..ce6efdb79 100644 --- a/src/tls.c +++ b/src/tls.c @@ -3193,14 +3193,14 @@ static int TLSX_SessionTicket_Parse(WOLFSSL* ssl, byte* input, word16 length, } WOLFSSL_LOCAL SessionTicket* TLSX_SessionTicket_Create(word32 lifetime, - byte* data, word16 size) + byte* data, word16 size, void* heap) { SessionTicket* ticket = (SessionTicket*)XMALLOC(sizeof(SessionTicket), - NULL, DYNAMIC_TYPE_TLSX); + heap, DYNAMIC_TYPE_TLSX); if (ticket) { - ticket->data = (byte*)XMALLOC(size, NULL, DYNAMIC_TYPE_TLSX); + ticket->data = (byte*)XMALLOC(size, heap, DYNAMIC_TYPE_TLSX); if (ticket->data == NULL) { - XFREE(ticket, NULL, DYNAMIC_TYPE_TLSX); + XFREE(ticket, heap, DYNAMIC_TYPE_TLSX); return NULL; } @@ -3211,12 +3211,14 @@ WOLFSSL_LOCAL SessionTicket* TLSX_SessionTicket_Create(word32 lifetime, return ticket; } -WOLFSSL_LOCAL void TLSX_SessionTicket_Free(SessionTicket* ticket) +WOLFSSL_LOCAL void TLSX_SessionTicket_Free(SessionTicket* ticket, void* heap) { if (ticket) { - XFREE(ticket->data, NULL, DYNAMIC_TYPE_TLSX); - XFREE(ticket, NULL, DYNAMIC_TYPE_TLSX); + XFREE(ticket->data, heap, DYNAMIC_TYPE_TLSX); + XFREE(ticket, heap, DYNAMIC_TYPE_TLSX); } + + (void)heap; } int TLSX_UseSessionTicket(TLSX** extensions, SessionTicket* ticket, void* heap) @@ -3913,6 +3915,8 @@ void TLSX_FreeAll(TLSX* list, void* heap) XFREE(extension, heap, DYNAMIC_TYPE_TLSX); } + + (void)heap; } /** Checks if the tls extensions are supported based on the protocol version. */ diff --git a/wolfssl/internal.h b/wolfssl/internal.h index 9dc8d0abd..e03415159 100644 --- a/wolfssl/internal.h +++ b/wolfssl/internal.h @@ -1848,8 +1848,8 @@ typedef struct SessionTicket { WOLFSSL_LOCAL int TLSX_UseSessionTicket(TLSX** extensions, SessionTicket* ticket, void* heap); WOLFSSL_LOCAL SessionTicket* TLSX_SessionTicket_Create(word32 lifetime, - byte* data, word16 size); -WOLFSSL_LOCAL void TLSX_SessionTicket_Free(SessionTicket* ticket); + byte* data, word16 size, void* heap); +WOLFSSL_LOCAL void TLSX_SessionTicket_Free(SessionTicket* ticket, void* heap); #endif /* HAVE_SESSION_TICKET */