forked from wolfSSL/wolfssl
Adapt wolfSSL_dtls_got_timeout to secure renegotiation usage
Reset DTLS stored messages on a FreeHandshakeResources call even if secure renegotiation is enabled. Without this, in a server initiated rehandshake, the server would keep old messages (ChangeCipherSpec and Finished) even when it sent a HelloRequest message.
This commit is contained in:
@@ -6488,6 +6488,16 @@ void SSL_ResourceFree(WOLFSSL* ssl)
|
|||||||
void FreeHandshakeResources(WOLFSSL* ssl)
|
void FreeHandshakeResources(WOLFSSL* ssl)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_DTLS
|
||||||
|
/* DTLS_POOL */
|
||||||
|
if (ssl->options.dtls) {
|
||||||
|
DtlsMsgPoolReset(ssl);
|
||||||
|
DtlsMsgListDelete(ssl->dtls_rx_msg_list, ssl->heap);
|
||||||
|
ssl->dtls_rx_msg_list = NULL;
|
||||||
|
ssl->dtls_rx_msg_list_sz = 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_SECURE_RENEGOTIATION
|
#ifdef HAVE_SECURE_RENEGOTIATION
|
||||||
if (ssl->secure_renegotiation && ssl->secure_renegotiation->enabled) {
|
if (ssl->secure_renegotiation && ssl->secure_renegotiation->enabled) {
|
||||||
WOLFSSL_MSG("Secure Renegotiation needs to retain handshake resources");
|
WOLFSSL_MSG("Secure Renegotiation needs to retain handshake resources");
|
||||||
@@ -6532,16 +6542,6 @@ void FreeHandshakeResources(WOLFSSL* ssl)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WOLFSSL_DTLS
|
|
||||||
/* DTLS_POOL */
|
|
||||||
if (ssl->options.dtls) {
|
|
||||||
DtlsMsgPoolReset(ssl);
|
|
||||||
DtlsMsgListDelete(ssl->dtls_rx_msg_list, ssl->heap);
|
|
||||||
ssl->dtls_rx_msg_list = NULL;
|
|
||||||
ssl->dtls_rx_msg_list_sz = 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(WOLFSSL_TLS13) && defined(WOLFSSL_POST_HANDSHAKE_AUTH) && \
|
#if defined(WOLFSSL_TLS13) && defined(WOLFSSL_POST_HANDSHAKE_AUTH) && \
|
||||||
defined(HAVE_SESSION_TICKET)
|
defined(HAVE_SESSION_TICKET)
|
||||||
if (!ssl->options.tls1_3)
|
if (!ssl->options.tls1_3)
|
||||||
|
@@ -11633,7 +11633,7 @@ int wolfSSL_dtls_got_timeout(WOLFSSL* ssl)
|
|||||||
if (ssl == NULL)
|
if (ssl == NULL)
|
||||||
return WOLFSSL_FATAL_ERROR;
|
return WOLFSSL_FATAL_ERROR;
|
||||||
|
|
||||||
if (!ssl->options.handShakeDone &&
|
if ((IsSCR(ssl) || !ssl->options.handShakeDone) &&
|
||||||
(DtlsMsgPoolTimeout(ssl) < 0 || DtlsMsgPoolSend(ssl, 0) < 0)) {
|
(DtlsMsgPoolTimeout(ssl) < 0 || DtlsMsgPoolSend(ssl, 0) < 0)) {
|
||||||
|
|
||||||
result = WOLFSSL_FATAL_ERROR;
|
result = WOLFSSL_FATAL_ERROR;
|
||||||
|
Reference in New Issue
Block a user