Merge pull request #3282 from gabor-mezei-arm/2905_missing_cleanup_in_ssl_tests

Force cleanup by using goto exit instead of direct return
This commit is contained in:
Gilles Peskine 2020-10-05 17:39:28 +02:00 committed by GitHub
commit d4d1ab1746
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 45 additions and 15 deletions

View File

@ -149,6 +149,7 @@ int main( void )
#define DFL_NSS_KEYLOG 0 #define DFL_NSS_KEYLOG 0
#define DFL_NSS_KEYLOG_FILE NULL #define DFL_NSS_KEYLOG_FILE NULL
#define DFL_SKIP_CLOSE_NOTIFY 0 #define DFL_SKIP_CLOSE_NOTIFY 0
#define DFL_QUERY_CONFIG_MODE 0
#define GET_REQUEST "GET %s HTTP/1.0\r\nExtra-header: " #define GET_REQUEST "GET %s HTTP/1.0\r\nExtra-header: "
#define GET_REQUEST_END "\r\n\r\n" #define GET_REQUEST_END "\r\n\r\n"
@ -539,6 +540,7 @@ struct options
* after renegotiation */ * after renegotiation */
int reproducible; /* make communication reproducible */ int reproducible; /* make communication reproducible */
int skip_close_notify; /* skip sending the close_notify alert */ int skip_close_notify; /* skip sending the close_notify alert */
int query_config_mode; /* whether to read config */
} opt; } opt;
int query_config( const char *config ); int query_config( const char *config );
@ -1102,6 +1104,7 @@ int report_cid_usage( mbedtls_ssl_context *ssl,
int main( int argc, char *argv[] ) int main( int argc, char *argv[] )
{ {
int ret = 0, len, tail_len, i, written, frags, retry_left; int ret = 0, len, tail_len, i, written, frags, retry_left;
int query_config_ret = 0;
mbedtls_net_context server_fd; mbedtls_net_context server_fd;
io_ctx_t io_ctx; io_ctx_t io_ctx;
@ -1300,6 +1303,7 @@ int main( int argc, char *argv[] )
opt.nss_keylog = DFL_NSS_KEYLOG; opt.nss_keylog = DFL_NSS_KEYLOG;
opt.nss_keylog_file = DFL_NSS_KEYLOG_FILE; opt.nss_keylog_file = DFL_NSS_KEYLOG_FILE;
opt.skip_close_notify = DFL_SKIP_CLOSE_NOTIFY; opt.skip_close_notify = DFL_SKIP_CLOSE_NOTIFY;
opt.query_config_mode = DFL_QUERY_CONFIG_MODE;
for( i = 1; i < argc; i++ ) for( i = 1; i < argc; i++ )
{ {
@ -1686,7 +1690,9 @@ int main( int argc, char *argv[] )
} }
else if( strcmp( p, "query_config" ) == 0 ) else if( strcmp( p, "query_config" ) == 0 )
{ {
mbedtls_exit( query_config( q ) ); opt.query_config_mode = 1;
query_config_ret = query_config( q );
goto exit;
} }
else if( strcmp( p, "serialize") == 0 ) else if( strcmp( p, "serialize") == 0 )
{ {
@ -2685,7 +2691,7 @@ int main( int argc, char *argv[] )
{ {
mbedtls_printf( " failed\n ! mbedtls_ssl_set_cid returned %d\n\n", mbedtls_printf( " failed\n ! mbedtls_ssl_set_cid returned %d\n\n",
ret ); ret );
return( ret ); goto exit;
} }
} }
#endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */ #endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */
@ -3348,7 +3354,8 @@ exit:
* immediately because of bad cmd line params, * immediately because of bad cmd line params,
* for example). */ * for example). */
status = psa_destroy_key( slot ); status = psa_destroy_key( slot );
if( status != PSA_SUCCESS ) if( ( status != PSA_SUCCESS ) &&
( opt.query_config_mode == DFL_QUERY_CONFIG_MODE ) )
{ {
mbedtls_printf( "Failed to destroy key slot %u - error was %d", mbedtls_printf( "Failed to destroy key slot %u - error was %d",
(unsigned) slot, (int) status ); (unsigned) slot, (int) status );
@ -3367,15 +3374,21 @@ exit:
#endif #endif
#if defined(_WIN32) #if defined(_WIN32)
if( opt.query_config_mode == DFL_QUERY_CONFIG_MODE )
{
mbedtls_printf( " + Press Enter to exit this program.\n" ); mbedtls_printf( " + Press Enter to exit this program.\n" );
fflush( stdout ); getchar(); fflush( stdout ); getchar();
}
#endif #endif
// Shell can not handle large exit numbers -> 1 for errors // Shell can not handle large exit numbers -> 1 for errors
if( ret < 0 ) if( ret < 0 )
ret = 1; ret = 1;
if( opt.query_config_mode == DFL_QUERY_CONFIG_MODE )
mbedtls_exit( ret ); mbedtls_exit( ret );
else
mbedtls_exit( query_config_ret );
} }
#endif /* MBEDTLS_BIGNUM_C && MBEDTLS_ENTROPY_C && MBEDTLS_SSL_TLS_C && #endif /* MBEDTLS_BIGNUM_C && MBEDTLS_ENTROPY_C && MBEDTLS_SSL_TLS_C &&
MBEDTLS_SSL_CLI_C && MBEDTLS_NET_C && MBEDTLS_RSA_C && MBEDTLS_SSL_CLI_C && MBEDTLS_NET_C && MBEDTLS_RSA_C &&

View File

@ -182,6 +182,7 @@ int main( void )
#define DFL_REPRODUCIBLE 0 #define DFL_REPRODUCIBLE 0
#define DFL_NSS_KEYLOG 0 #define DFL_NSS_KEYLOG 0
#define DFL_NSS_KEYLOG_FILE NULL #define DFL_NSS_KEYLOG_FILE NULL
#define DFL_QUERY_CONFIG_MODE 0
#define LONG_RESPONSE "<p>01-blah-blah-blah-blah-blah-blah-blah-blah-blah\r\n" \ #define LONG_RESPONSE "<p>01-blah-blah-blah-blah-blah-blah-blah-blah-blah\r\n" \
"02-blah-blah-blah-blah-blah-blah-blah-blah-blah-blah-blah-blah-blah\r\n" \ "02-blah-blah-blah-blah-blah-blah-blah-blah-blah-blah-blah-blah-blah\r\n" \
@ -643,6 +644,7 @@ struct options
const char *cid_val_renego; /* the CID to use for incoming messages const char *cid_val_renego; /* the CID to use for incoming messages
* after renegotiation */ * after renegotiation */
int reproducible; /* make communication reproducible */ int reproducible; /* make communication reproducible */
int query_config_mode; /* whether to read config */
} opt; } opt;
int query_config( const char *config ); int query_config( const char *config );
@ -1723,6 +1725,7 @@ int report_cid_usage( mbedtls_ssl_context *ssl,
int main( int argc, char *argv[] ) int main( int argc, char *argv[] )
{ {
int ret = 0, len, written, frags, exchanges_left; int ret = 0, len, written, frags, exchanges_left;
int query_config_ret = 0;
int version_suites[4][2]; int version_suites[4][2];
io_ctx_t io_ctx; io_ctx_t io_ctx;
unsigned char* buf = 0; unsigned char* buf = 0;
@ -1972,6 +1975,7 @@ int main( int argc, char *argv[] )
opt.reproducible = DFL_REPRODUCIBLE; opt.reproducible = DFL_REPRODUCIBLE;
opt.nss_keylog = DFL_NSS_KEYLOG; opt.nss_keylog = DFL_NSS_KEYLOG;
opt.nss_keylog_file = DFL_NSS_KEYLOG_FILE; opt.nss_keylog_file = DFL_NSS_KEYLOG_FILE;
opt.query_config_mode = DFL_QUERY_CONFIG_MODE;
for( i = 1; i < argc; i++ ) for( i = 1; i < argc; i++ )
{ {
@ -2386,7 +2390,9 @@ int main( int argc, char *argv[] )
} }
else if( strcmp( p, "query_config" ) == 0 ) else if( strcmp( p, "query_config" ) == 0 )
{ {
mbedtls_exit( query_config( q ) ); opt.query_config_mode = 1;
query_config_ret = query_config( q );
goto exit;
} }
else if( strcmp( p, "serialize") == 0 ) else if( strcmp( p, "serialize") == 0 )
{ {
@ -4261,8 +4267,11 @@ exit:
} }
#endif #endif
if( opt.query_config_mode == DFL_QUERY_CONFIG_MODE )
{
mbedtls_printf( " . Cleaning up..." ); mbedtls_printf( " . Cleaning up..." );
fflush( stdout ); fflush( stdout );
}
mbedtls_net_free( &client_fd ); mbedtls_net_free( &client_fd );
mbedtls_net_free( &listen_fd ); mbedtls_net_free( &listen_fd );
@ -4292,7 +4301,8 @@ exit:
sni_free( sni_info ); sni_free( sni_info );
#endif #endif
#if defined(MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED) #if defined(MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED)
if( ( ret = psk_free( psk_info ) ) != 0 ) ret = psk_free( psk_info );
if( ( ret != 0 ) && ( opt.query_config_mode == DFL_QUERY_CONFIG_MODE ) )
mbedtls_printf( "Failed to list of opaque PSKs - error was %d\n", ret ); mbedtls_printf( "Failed to list of opaque PSKs - error was %d\n", ret );
#endif #endif
#if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_FS_IO) #if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_FS_IO)
@ -4308,7 +4318,8 @@ exit:
* immediately because of bad cmd line params, * immediately because of bad cmd line params,
* for example). */ * for example). */
status = psa_destroy_key( psk_slot ); status = psa_destroy_key( psk_slot );
if( status != PSA_SUCCESS ) if( ( status != PSA_SUCCESS ) &&
( opt.query_config_mode == DFL_QUERY_CONFIG_MODE ) )
{ {
mbedtls_printf( "Failed to destroy key slot %u - error was %d", mbedtls_printf( "Failed to destroy key slot %u - error was %d",
(unsigned) psk_slot, (int) status ); (unsigned) psk_slot, (int) status );
@ -4347,18 +4358,24 @@ exit:
mbedtls_memory_buffer_alloc_free(); mbedtls_memory_buffer_alloc_free();
#endif #endif
if( opt.query_config_mode == DFL_QUERY_CONFIG_MODE )
{
mbedtls_printf( " done.\n" ); mbedtls_printf( " done.\n" );
#if defined(_WIN32) #if defined(_WIN32)
mbedtls_printf( " + Press Enter to exit this program.\n" ); mbedtls_printf( " + Press Enter to exit this program.\n" );
fflush( stdout ); getchar(); fflush( stdout ); getchar();
#endif #endif
}
// Shell can not handle large exit numbers -> 1 for errors // Shell can not handle large exit numbers -> 1 for errors
if( ret < 0 ) if( ret < 0 )
ret = 1; ret = 1;
if( opt.query_config_mode == DFL_QUERY_CONFIG_MODE )
mbedtls_exit( ret ); mbedtls_exit( ret );
else
mbedtls_exit( query_config_ret );
} }
#endif /* MBEDTLS_BIGNUM_C && MBEDTLS_ENTROPY_C && MBEDTLS_SSL_TLS_C && #endif /* MBEDTLS_BIGNUM_C && MBEDTLS_ENTROPY_C && MBEDTLS_SSL_TLS_C &&
MBEDTLS_SSL_SRV_C && MBEDTLS_NET_C && MBEDTLS_RSA_C && MBEDTLS_SSL_SRV_C && MBEDTLS_NET_C && MBEDTLS_RSA_C &&