From 88a2264def143fc9d5b8705bb6aec188ec61061f Mon Sep 17 00:00:00 2001
From: Paul Bakker
Date: Wed, 11 Sep 2013 12:14:16 +0200
Subject: [PATCH] Fixed potential file descriptor leaks
---
ChangeLog | 1 +
library/ctr_drbg.c | 6 ++++++
library/x509parse.c | 3 +++
3 files changed, 10 insertions(+)
diff --git a/ChangeLog b/ChangeLog
index 794bcf645..a420e6c5b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -6,6 +6,7 @@ Changes
Bugfix
* Fixed potential memory leak when failing to resume a session
+ * Fixed potential file descriptor leaks (found by Remi Gacogne)
* Minor fixes
Security
diff --git a/library/ctr_drbg.c b/library/ctr_drbg.c
index 8cf03712e..2ff0b338c 100644
--- a/library/ctr_drbg.c
+++ b/library/ctr_drbg.c
@@ -356,7 +356,10 @@ int ctr_drbg_write_seed_file( ctr_drbg_context *ctx, const char *path )
return( POLARSSL_ERR_CTR_DRBG_FILE_IO_ERROR );
if( ( ret = ctr_drbg_random( ctx, buf, CTR_DRBG_MAX_INPUT ) ) != 0 )
+ {
+ fclose( f );
return( ret );
+ }
if( fwrite( buf, 1, CTR_DRBG_MAX_INPUT, f ) != CTR_DRBG_MAX_INPUT )
{
@@ -382,7 +385,10 @@ int ctr_drbg_update_seed_file( ctr_drbg_context *ctx, const char *path )
fseek( f, 0, SEEK_SET );
if( n > CTR_DRBG_MAX_INPUT )
+ {
+ fclose( f );
return( POLARSSL_ERR_CTR_DRBG_INPUT_TOO_BIG );
+ }
if( fread( buf, 1, n, f ) != n )
{
diff --git a/library/x509parse.c b/library/x509parse.c
index efde3f578..4b4be6614 100644
--- a/library/x509parse.c
+++ b/library/x509parse.c
@@ -1967,7 +1967,10 @@ cleanup:
i = stat( entry_name, &sb );
if( i == -1 )
+ {
+ closedir( dir );
return( POLARSSL_ERR_X509_FILE_IO_ERROR );
+ }
if( !S_ISREG( sb.st_mode ) )
continue;