diff --git a/ChangeLog.d/fix_some_resource_leaks.txt b/ChangeLog.d/fix_some_resource_leaks.txt new file mode 100644 index 000000000..f8db3f291 --- /dev/null +++ b/ChangeLog.d/fix_some_resource_leaks.txt @@ -0,0 +1,4 @@ +Bugfix + * Fix resource leaks in mbedtls_pk_parse_public_key() in low + memory conditions. + diff --git a/library/pkparse.c b/library/pkparse.c index cfc1dca63..ea5c6b69c 100644 --- a/library/pkparse.c +++ b/library/pkparse.c @@ -1463,10 +1463,16 @@ int mbedtls_pk_parse_public_key( mbedtls_pk_context *ctx, { p = pem.buf; if( ( pk_info = mbedtls_pk_info_from_type( MBEDTLS_PK_RSA ) ) == NULL ) + { + mbedtls_pem_free( &pem ); return( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); + } if( ( ret = mbedtls_pk_setup( ctx, pk_info ) ) != 0 ) + { + mbedtls_pem_free( &pem ); return( ret ); + } if ( ( ret = pk_get_rsapubkey( &p, p + pem.buflen, mbedtls_pk_rsa( *ctx ) ) ) != 0 ) mbedtls_pk_free( ctx );