From 964bf9b92f866167214d01cb3afdc533dcc4dfe7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20P=C3=A9gouri=C3=A9-Gonnard?= Date: Tue, 26 Nov 2013 16:47:11 +0100 Subject: [PATCH] Quit using readdir_r() Prone to buffer overflows on some platforms. --- include/polarssl/config.h | 11 ----------- library/x509_crt.c | 21 +++++---------------- 2 files changed, 5 insertions(+), 27 deletions(-) diff --git a/include/polarssl/config.h b/include/polarssl/config.h index a631a4a90..8390511ba 100644 --- a/include/polarssl/config.h +++ b/include/polarssl/config.h @@ -93,17 +93,6 @@ */ //#define POLARSSL_HAVE_SSE2 -/** - * \def POLARSSL_HAVE_READDIR_R - * - * (Non Windows) System has readdir_r(). - * - * Required for x509_crt_parse_path() in non-Windows systems. - * - * Comment if your system does not have support. - */ -#define POLARSSL_HAVE_READDIR_R - /** * \def POLARSSL_HAVE_TIME * diff --git a/library/x509_crt.c b/library/x509_crt.c index 6382c5377..5330bf170 100644 --- a/library/x509_crt.c +++ b/library/x509_crt.c @@ -991,26 +991,20 @@ int x509_crt_parse_path( x509_crt *chain, const char *path ) FindClose( hFind ); #else /* _WIN32 */ -#if defined(POLARSSL_HAVE_READDIR_R) - int t_ret, i; + int t_ret; struct stat sb; - struct dirent entry, *result = NULL; + struct dirent *entry; char entry_name[255]; DIR *dir = opendir( path ); if( dir == NULL) return( POLARSSL_ERR_X509_FILE_IO_ERROR ); - while( ( t_ret = readdir_r( dir, &entry, &result ) ) == 0 ) + while( ( entry = readdir( dir ) ) != NULL ) { - if( result == NULL ) - break; + snprintf( entry_name, sizeof entry_name, "%s/%s", path, entry->d_name ); - snprintf( entry_name, sizeof(entry_name), "%s/%s", path, entry.d_name ); - - i = stat( entry_name, &sb ); - - if( i == -1 ) + if( stat( entry_name, &sb ) == -1 ) { closedir( dir ); return( POLARSSL_ERR_X509_FILE_IO_ERROR ); @@ -1028,11 +1022,6 @@ int x509_crt_parse_path( x509_crt *chain, const char *path ) ret += t_ret; } closedir( dir ); -#else /* POLARSSL_HAVE_READDIR_R */ - ((void) chain); - ((void) path); - ret = POLARSSL_ERR_X509_FEATURE_UNAVAILABLE; -#endif /* POLARSSL_HAVE_READDIR_R */ #endif /* _WIN32 */ return( ret );