mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2025-07-29 11:41:15 +03:00
Merge pull request #5120 from yuhaoth/pr/fix-memory-leak-and-version-header
TLS1.3 :fix memory leak and version header
This commit is contained in:
@ -2560,9 +2560,15 @@ int mbedtls_ssl_write_record( mbedtls_ssl_context *ssl, uint8_t force_flush )
|
|||||||
#endif
|
#endif
|
||||||
/* Skip writing the record content type to after the encryption,
|
/* Skip writing the record content type to after the encryption,
|
||||||
* as it may change when using the CID extension. */
|
* as it may change when using the CID extension. */
|
||||||
|
int minor_ver = ssl->minor_ver;
|
||||||
mbedtls_ssl_write_version( ssl->major_ver, ssl->minor_ver,
|
#if defined(MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL)
|
||||||
ssl->conf->transport, ssl->out_hdr + 1 );
|
/* 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 */
|
||||||
|
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 );
|
memcpy( ssl->out_ctr, ssl->cur_out_ctr, MBEDTLS_SSL_SEQUENCE_NUMBER_LEN );
|
||||||
MBEDTLS_PUT_UINT16_BE( len, ssl->out_len, 0);
|
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;
|
rec.data_offset = ssl->out_msg - rec.buf;
|
||||||
|
|
||||||
memcpy( &rec.ctr[0], ssl->out_ctr, sizeof( rec.ctr ) );
|
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 );
|
ssl->conf->transport, rec.ver );
|
||||||
rec.type = ssl->out_msgtype;
|
rec.type = ssl->out_msgtype;
|
||||||
|
|
||||||
|
@ -5551,8 +5551,13 @@ void mbedtls_ssl_handshake_free( mbedtls_ssl_context *ssl )
|
|||||||
psa_destroy_key( handshake->ecdh_psa_privkey );
|
psa_destroy_key( handshake->ecdh_psa_privkey );
|
||||||
#endif /* MBEDTLS_ECDH_C && MBEDTLS_USE_PSA_CRYPTO */
|
#endif /* MBEDTLS_ECDH_C && MBEDTLS_USE_PSA_CRYPTO */
|
||||||
|
|
||||||
mbedtls_platform_zeroize( handshake,
|
#if defined(MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL)
|
||||||
sizeof( mbedtls_ssl_handshake_params ) );
|
mbedtls_ssl_transform_free( handshake->transform_handshake );
|
||||||
|
mbedtls_ssl_transform_free( handshake->transform_earlydata );
|
||||||
|
mbedtls_free( handshake->transform_earlydata );
|
||||||
|
mbedtls_free( handshake->transform_handshake );
|
||||||
|
#endif /* MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL */
|
||||||
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH)
|
#if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH)
|
||||||
/* If the buffers are too big - reallocate. Because of the way Mbed TLS
|
/* If the buffers are too big - reallocate. Because of the way Mbed TLS
|
||||||
@ -5563,12 +5568,9 @@ void mbedtls_ssl_handshake_free( mbedtls_ssl_context *ssl )
|
|||||||
mbedtls_ssl_get_output_buflen( ssl ) );
|
mbedtls_ssl_get_output_buflen( ssl ) );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL)
|
/* mbedtls_platform_zeroize MUST be last one in this function */
|
||||||
mbedtls_free( handshake->transform_earlydata );
|
mbedtls_platform_zeroize( handshake,
|
||||||
mbedtls_free( handshake->transform_handshake );
|
sizeof( mbedtls_ssl_handshake_params ) );
|
||||||
handshake->transform_earlydata = NULL;
|
|
||||||
handshake->transform_handshake = NULL;
|
|
||||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void mbedtls_ssl_session_free( mbedtls_ssl_session *session )
|
void mbedtls_ssl_session_free( mbedtls_ssl_session *session )
|
||||||
|
Reference in New Issue
Block a user