Add function to free a particular buffering slot
This commit adds a static function ssl_buffering_free_slot() which allows to free a particular structure used to buffer and/or reassembly some handshake message.
This commit is contained in:
parent
96a6c69d0c
commit
e605b19631
1 changed files with 18 additions and 13 deletions
|
@ -170,6 +170,9 @@ static int ssl_get_remaining_payload_in_datagram( mbedtls_ssl_context const *ssl
|
||||||
|
|
||||||
static void ssl_buffering_free( mbedtls_ssl_context *ssl );
|
static void ssl_buffering_free( mbedtls_ssl_context *ssl );
|
||||||
|
|
||||||
|
static void ssl_buffering_free_slot( mbedtls_ssl_context *ssl,
|
||||||
|
uint8_t slot );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Double the retransmit timeout value, within the allowed range,
|
* Double the retransmit timeout value, within the allowed range,
|
||||||
* returning -1 if the maximum value has already been reached.
|
* returning -1 if the maximum value has already been reached.
|
||||||
|
@ -3663,15 +3666,11 @@ void mbedtls_ssl_update_handshake_status( mbedtls_ssl_context *ssl )
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Free first entry */
|
/* Free first entry */
|
||||||
hs_buf = &hs->buffering.hs[0];
|
ssl_buffering_free_slot( ssl, 0 );
|
||||||
if( hs_buf->is_valid )
|
|
||||||
{
|
|
||||||
hs->buffering.total_bytes_buffered -= hs_buf->data_len;
|
|
||||||
mbedtls_free( hs_buf->data );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Shift all other entries */
|
/* Shift all other entries */
|
||||||
for( offset = 0; offset + 1 < MBEDTLS_SSL_MAX_BUFFERED_HS;
|
for( offset = 0, hs_buf = &hs->buffering.hs[0];
|
||||||
|
offset + 1 < MBEDTLS_SSL_MAX_BUFFERED_HS;
|
||||||
offset++, hs_buf++ )
|
offset++, hs_buf++ )
|
||||||
{
|
{
|
||||||
*hs_buf = *(hs_buf + 1);
|
*hs_buf = *(hs_buf + 1);
|
||||||
|
@ -8564,13 +8563,19 @@ static void ssl_buffering_free( mbedtls_ssl_context *ssl )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for( offset = 0; offset < MBEDTLS_SSL_MAX_BUFFERED_HS; offset++ )
|
for( offset = 0; offset < MBEDTLS_SSL_MAX_BUFFERED_HS; offset++ )
|
||||||
|
ssl_buffering_free_slot( ssl, offset );
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ssl_buffering_free_slot( mbedtls_ssl_context *ssl,
|
||||||
|
uint8_t slot )
|
||||||
|
{
|
||||||
|
mbedtls_ssl_handshake_params * const hs = ssl->handshake;
|
||||||
|
mbedtls_ssl_hs_buffer * const hs_buf = &hs->buffering.hs[slot];
|
||||||
|
if( hs_buf->is_valid == 1 )
|
||||||
{
|
{
|
||||||
mbedtls_ssl_hs_buffer *hs_buf = &hs->buffering.hs[offset];
|
hs->buffering.total_bytes_buffered -= hs_buf->data_len;
|
||||||
if( hs_buf->is_valid == 1 )
|
mbedtls_free( hs_buf->data );
|
||||||
{
|
memset( hs_buf, 0, sizeof( mbedtls_ssl_hs_buffer ) );
|
||||||
mbedtls_free( hs_buf->data );
|
|
||||||
memset( hs_buf, 0, sizeof( mbedtls_ssl_hs_buffer ) );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue