Re-use buffer allocated by handshake_init()

This fixes a memory leak as well (found by running ssl-opt.sh in an Asan
build).
This commit is contained in:
Manuel Pégourié-Gonnard 2019-07-23 14:43:30 +02:00
parent 0d83271a45
commit ff22200fab

View file

@ -11048,13 +11048,12 @@ static int ssl_context_load( mbedtls_ssl_context *ssl,
( (size_t) p[3] ); ( (size_t) p[3] );
p += 4; p += 4;
ssl->session = mbedtls_calloc( 1, sizeof( mbedtls_ssl_session ) ); /* This has been allocated by ssl_handshake_init(), called by
if( ssl->session == NULL ) * by either ssl_session_reset_int() or mbedtls_ssl_setup(). */
return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); ssl->session = ssl->session_negotiate;
mbedtls_ssl_session_init( ssl->session );
ssl->session_in = ssl->session; ssl->session_in = ssl->session;
ssl->session_out = ssl->session; ssl->session_out = ssl->session;
ssl->session_negotiate = NULL;
if( (size_t)( end - p ) < session_len ) if( (size_t)( end - p ) < session_len )
return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA );
@ -11069,14 +11068,12 @@ static int ssl_context_load( mbedtls_ssl_context *ssl,
* Transform * Transform
*/ */
/* Allocate and initialize structure */ /* This has been allocated by ssl_handshake_init(), called by
ssl->transform = mbedtls_calloc( 1, sizeof( mbedtls_ssl_transform ) ); * by either ssl_session_reset_int() or mbedtls_ssl_setup(). */
if( ssl->transform == NULL ) ssl->transform = ssl->transform_negotiate;
return( MBEDTLS_ERR_SSL_ALLOC_FAILED );
mbedtls_ssl_transform_init( ssl->transform );
ssl->transform_in = ssl->transform; ssl->transform_in = ssl->transform;
ssl->transform_out = ssl->transform; ssl->transform_out = ssl->transform;
ssl->transform_negotiate = NULL;
/* Read random bytes and populate structure */ /* Read random bytes and populate structure */
if( (size_t)( end - p ) < sizeof( ssl->transform->randbytes ) ) if( (size_t)( end - p ) < sizeof( ssl->transform->randbytes ) )