From 47413c2c8f5ad766874e279445a1e567ed9935e3 Mon Sep 17 00:00:00 2001 From: Jerry Yu Date: Fri, 29 Oct 2021 17:19:41 +0800 Subject: [PATCH 1/4] fix wrong version header for tls1.3 Signed-off-by: Jerry Yu --- library/ssl_msg.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/library/ssl_msg.c b/library/ssl_msg.c index 3795c65475..40eb57e223 100644 --- a/library/ssl_msg.c +++ b/library/ssl_msg.c @@ -2560,9 +2560,15 @@ int mbedtls_ssl_write_record( mbedtls_ssl_context *ssl, uint8_t force_flush ) #endif /* Skip writing the record content type to after the encryption, * as it may change when using the CID extension. */ - - mbedtls_ssl_write_version( ssl->major_ver, ssl->minor_ver, - ssl->conf->transport, ssl->out_hdr + 1 ); + int minor_ver = ssl->minor_ver; +#if defined(MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL) + /* TLS 1.3 still uses the TLS 1.3 version identifier + * for backwards compatibility. */ + if( minor_ver == MBEDTLS_SSL_MINOR_VERSION_4 ) + minor_ver = MBEDTLS_SSL_MINOR_VERSION_3; +#endif /* MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL */ + mbedtls_ssl_write_version( ssl->major_ver, minor_ver, + ssl->conf->transport, ssl->out_hdr + 1 ); memcpy( ssl->out_ctr, ssl->cur_out_ctr, MBEDTLS_SSL_SEQUENCE_NUMBER_LEN ); MBEDTLS_PUT_UINT16_BE( len, ssl->out_len, 0); @@ -2577,7 +2583,7 @@ int mbedtls_ssl_write_record( mbedtls_ssl_context *ssl, uint8_t force_flush ) rec.data_offset = ssl->out_msg - rec.buf; memcpy( &rec.ctr[0], ssl->out_ctr, sizeof( rec.ctr ) ); - mbedtls_ssl_write_version( ssl->major_ver, ssl->minor_ver, + mbedtls_ssl_write_version( ssl->major_ver, minor_ver, ssl->conf->transport, rec.ver ); rec.type = ssl->out_msgtype; @@ -5619,6 +5625,7 @@ static void ssl_buffering_free_slot( mbedtls_ssl_context *ssl, void mbedtls_ssl_write_version( int major, int minor, int transport, unsigned char ver[2] ) { + #if defined(MBEDTLS_SSL_PROTO_DTLS) if( transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { From ba9c727e94a6d26fd9c93c10759872310bd5e6f1 Mon Sep 17 00:00:00 2001 From: Jerry Yu Date: Sat, 30 Oct 2021 11:54:10 +0800 Subject: [PATCH 2/4] fix memory leak issue Signed-off-by: Jerry Yu --- library/ssl_tls.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/library/ssl_tls.c b/library/ssl_tls.c index c5079508ee..1929d8b3ee 100644 --- a/library/ssl_tls.c +++ b/library/ssl_tls.c @@ -5477,8 +5477,15 @@ void mbedtls_ssl_handshake_free( mbedtls_ssl_context *ssl ) psa_destroy_key( handshake->ecdh_psa_privkey ); #endif /* MBEDTLS_ECDH_C && MBEDTLS_USE_PSA_CRYPTO */ - mbedtls_platform_zeroize( handshake, - sizeof( mbedtls_ssl_handshake_params ) ); +#if defined(MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL) + mbedtls_ssl_transform_free(handshake->transform_handshake); + mbedtls_ssl_transform_free(handshake->transform_earlydata); + mbedtls_free( handshake->transform_earlydata ); + mbedtls_free( handshake->transform_handshake ); + handshake->transform_earlydata = NULL; + handshake->transform_handshake = NULL; +#endif /* MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL */ + #if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH) /* If the buffers are too big - reallocate. Because of the way Mbed TLS @@ -5489,12 +5496,9 @@ void mbedtls_ssl_handshake_free( mbedtls_ssl_context *ssl ) mbedtls_ssl_get_output_buflen( ssl ) ); #endif -#if defined(MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL) - mbedtls_free( handshake->transform_earlydata ); - mbedtls_free( handshake->transform_handshake ); - handshake->transform_earlydata = NULL; - handshake->transform_handshake = NULL; -#endif /* MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL */ + /* mbedtls_platform_zeroize MUST be last one in this function */ + mbedtls_platform_zeroize( handshake, + sizeof( mbedtls_ssl_handshake_params ) ); } void mbedtls_ssl_session_free( mbedtls_ssl_session *session ) From 1ca80f7ca5fe9cc93849ee0cb1d7aa91baec6759 Mon Sep 17 00:00:00 2001 From: Jerry Yu Date: Mon, 8 Nov 2021 10:30:54 +0800 Subject: [PATCH 3/4] fix comment issue Signed-off-by: Jerry Yu --- library/ssl_msg.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/ssl_msg.c b/library/ssl_msg.c index 40eb57e223..fc3ecc8824 100644 --- a/library/ssl_msg.c +++ b/library/ssl_msg.c @@ -2562,8 +2562,8 @@ int mbedtls_ssl_write_record( mbedtls_ssl_context *ssl, uint8_t force_flush ) * as it may change when using the CID extension. */ int minor_ver = ssl->minor_ver; #if defined(MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL) - /* TLS 1.3 still uses the TLS 1.3 version identifier - * for backwards compatibility. */ + /* TLS 1.3 still uses the TLS 1.2 version identifier + * for backwards compatibility. */ if( minor_ver == MBEDTLS_SSL_MINOR_VERSION_4 ) minor_ver = MBEDTLS_SSL_MINOR_VERSION_3; #endif /* MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL */ From a1a568c2f6fa5f87889d972b92867c7517f88f5b Mon Sep 17 00:00:00 2001 From: Jerry Yu Date: Tue, 9 Nov 2021 10:17:21 +0800 Subject: [PATCH 4/4] fix various issues Signed-off-by: Jerry Yu --- library/ssl_msg.c | 1 - library/ssl_tls.c | 6 ++---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/library/ssl_msg.c b/library/ssl_msg.c index fc3ecc8824..3c7700bab3 100644 --- a/library/ssl_msg.c +++ b/library/ssl_msg.c @@ -5625,7 +5625,6 @@ static void ssl_buffering_free_slot( mbedtls_ssl_context *ssl, void mbedtls_ssl_write_version( int major, int minor, int transport, unsigned char ver[2] ) { - #if defined(MBEDTLS_SSL_PROTO_DTLS) if( transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { diff --git a/library/ssl_tls.c b/library/ssl_tls.c index 1929d8b3ee..d91f2312cf 100644 --- a/library/ssl_tls.c +++ b/library/ssl_tls.c @@ -5478,12 +5478,10 @@ void mbedtls_ssl_handshake_free( mbedtls_ssl_context *ssl ) #endif /* MBEDTLS_ECDH_C && MBEDTLS_USE_PSA_CRYPTO */ #if defined(MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL) - mbedtls_ssl_transform_free(handshake->transform_handshake); - mbedtls_ssl_transform_free(handshake->transform_earlydata); + mbedtls_ssl_transform_free( handshake->transform_handshake ); + mbedtls_ssl_transform_free( handshake->transform_earlydata ); mbedtls_free( handshake->transform_earlydata ); mbedtls_free( handshake->transform_handshake ); - handshake->transform_earlydata = NULL; - handshake->transform_handshake = NULL; #endif /* MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL */