mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2025-04-04 04:20:43 +00:00
Fix memory leak in ssl_setup
This commit is contained in:
parent
00af447ba8
commit
a47911cb70
@ -5671,27 +5671,30 @@ void mbedtls_ssl_init( mbedtls_ssl_context *ssl )
|
|||||||
int mbedtls_ssl_setup( mbedtls_ssl_context *ssl,
|
int mbedtls_ssl_setup( mbedtls_ssl_context *ssl,
|
||||||
const mbedtls_ssl_config *conf )
|
const mbedtls_ssl_config *conf )
|
||||||
{
|
{
|
||||||
int ret;
|
int err;
|
||||||
|
const size_t len = MBEDTLS_SSL_BUFFER_LEN;
|
||||||
|
|
||||||
ssl->conf = conf;
|
ssl->conf = conf;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Prepare base structures
|
* Prepare base structures
|
||||||
*/
|
*/
|
||||||
|
ssl->out_buf = NULL; /* Set to NULL in case of an error condition */
|
||||||
|
|
||||||
ssl->in_buf = mbedtls_calloc( 1, MBEDTLS_SSL_IN_BUFFER_LEN );
|
ssl->in_buf = mbedtls_calloc( 1, MBEDTLS_SSL_IN_BUFFER_LEN );
|
||||||
if( ssl->in_buf == NULL )
|
if( ssl->in_buf == NULL )
|
||||||
{
|
{
|
||||||
MBEDTLS_SSL_DEBUG_MSG( 1, ( "alloc(%d bytes) failed", MBEDTLS_SSL_IN_BUFFER_LEN) );
|
MBEDTLS_SSL_DEBUG_MSG( 1, ( "alloc(%d bytes) failed", MBEDTLS_SSL_IN_BUFFER_LEN) );
|
||||||
return( MBEDTLS_ERR_SSL_ALLOC_FAILED );
|
err = MBEDTLS_ERR_SSL_ALLOC_FAILED;
|
||||||
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
ssl->out_buf = mbedtls_calloc( 1, MBEDTLS_SSL_OUT_BUFFER_LEN );
|
ssl->out_buf = mbedtls_calloc( 1, MBEDTLS_SSL_OUT_BUFFER_LEN );
|
||||||
if( ssl->out_buf == NULL )
|
if( ssl->out_buf == NULL )
|
||||||
{
|
{
|
||||||
MBEDTLS_SSL_DEBUG_MSG( 1, ( "alloc(%d bytes) failed", MBEDTLS_SSL_OUT_BUFFER_LEN) );
|
MBEDTLS_SSL_DEBUG_MSG( 1, ( "alloc(%d bytes) failed", MBEDTLS_SSL_OUT_BUFFER_LEN) );
|
||||||
mbedtls_free( ssl->in_buf );
|
err = MBEDTLS_ERR_SSL_ALLOC_FAILED;
|
||||||
ssl->in_buf = NULL;
|
goto error;
|
||||||
return( MBEDTLS_ERR_SSL_ALLOC_FAILED );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(MBEDTLS_SSL_PROTO_DTLS)
|
#if defined(MBEDTLS_SSL_PROTO_DTLS)
|
||||||
@ -5725,10 +5728,33 @@ int mbedtls_ssl_setup( mbedtls_ssl_context *ssl,
|
|||||||
ssl->in_msg = ssl->in_buf + 13;
|
ssl->in_msg = ssl->in_buf + 13;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( ( ret = ssl_handshake_init( ssl ) ) != 0 )
|
if( ( err = ssl_handshake_init( ssl ) ) != 0 )
|
||||||
return( ret );
|
goto error;
|
||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
|
|
||||||
|
error:
|
||||||
|
mbedtls_free( ssl->in_buf );
|
||||||
|
mbedtls_free( ssl->out_buf );
|
||||||
|
|
||||||
|
ssl->conf = NULL;
|
||||||
|
|
||||||
|
ssl->in_buf = NULL;
|
||||||
|
ssl->out_buf = NULL;
|
||||||
|
|
||||||
|
ssl->in_hdr = NULL;
|
||||||
|
ssl->in_ctr = NULL;
|
||||||
|
ssl->in_len = NULL;
|
||||||
|
ssl->in_iv = NULL;
|
||||||
|
ssl->in_msg = NULL;
|
||||||
|
|
||||||
|
ssl->out_hdr = NULL;
|
||||||
|
ssl->out_ctr = NULL;
|
||||||
|
ssl->out_len = NULL;
|
||||||
|
ssl->out_iv = NULL;
|
||||||
|
ssl->out_msg = NULL;
|
||||||
|
|
||||||
|
return( err );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user