Fix premature fopen() call in mbedtls_entropy_write_seed_file #3175

Signed-off-by: Victor Krasnoshchok <ct3da21164@protonmail.ch>
diff --git a/library/entropy.c b/library/entropy.c
index db61f16..519c3ae 100644
--- a/library/entropy.c
+++ b/library/entropy.c
@@ -466,28 +466,27 @@
 #if defined(MBEDTLS_FS_IO)
 int mbedtls_entropy_write_seed_file( mbedtls_entropy_context *ctx, const char *path )
 {
-    int ret = MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR;
-    FILE *f;
+    int ret;
+    FILE *f = NULL;
     unsigned char buf[MBEDTLS_ENTROPY_BLOCK_SIZE];
 
-    if( ( f = fopen( path, "wb" ) ) == NULL )
-        return( MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR );
-
     if( ( ret = mbedtls_entropy_func( ctx, buf, MBEDTLS_ENTROPY_BLOCK_SIZE ) ) != 0 )
         goto exit;
 
-    if( fwrite( buf, 1, MBEDTLS_ENTROPY_BLOCK_SIZE, f ) != MBEDTLS_ENTROPY_BLOCK_SIZE )
+    ret = MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR;
+    if( ( f = fopen( path, "wb" ) ) != NULL )
     {
-        ret = MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR;
-        goto exit;
+        if( fwrite( buf, 1, MBEDTLS_ENTROPY_BLOCK_SIZE, f ) != MBEDTLS_ENTROPY_BLOCK_SIZE )
+            goto exit;
+        ret = 0;
     }
 
-    ret = 0;
-
 exit:
     mbedtls_platform_zeroize( buf, sizeof( buf ) );
 
-    fclose( f );
+    if( f )
+        fclose( f );
+
     return( ret );
 }