From 8bb9e88d5f8731fe73c47ba3eb8812a410dbb85c Mon Sep 17 00:00:00 2001 From: Frederik Deweerdt Date: Fri, 11 May 2012 14:05:21 -0700 Subject: [PATCH] ITS#7270 Protect accesses to ldap_int_hostname with a mutex. Not protecting the accesses to ldap_int_hostname could lead to a double free. --- libraries/libldap/init.c | 2 ++ libraries/libldap/ldap-int.h | 1 + libraries/libldap/util-int.c | 3 +++ 3 files changed, 6 insertions(+) diff --git a/libraries/libldap/init.c b/libraries/libldap/init.c index 9d37e64939..1247bbb9f9 100644 --- a/libraries/libldap/init.c +++ b/libraries/libldap/init.c @@ -642,6 +642,7 @@ void ldap_int_initialize( struct ldapoptions *gopts, int *dbglvl ) #if defined(HAVE_TLS) || defined(HAVE_CYRUS_SASL) { + LDAP_MUTEX_LOCK( &ldap_int_hostname_mutex ); char *name = ldap_int_hostname; ldap_int_hostname = ldap_pvt_get_fqdn( name ); @@ -649,6 +650,7 @@ void ldap_int_initialize( struct ldapoptions *gopts, int *dbglvl ) if ( name != NULL && name != ldap_int_hostname ) { LDAP_FREE( name ); } + LDAP_MUTEX_UNLOCK( &ldap_int_hostname_mutex ); } #endif diff --git a/libraries/libldap/ldap-int.h b/libraries/libldap/ldap-int.h index ad37250ad1..be824e4e82 100644 --- a/libraries/libldap/ldap-int.h +++ b/libraries/libldap/ldap-int.h @@ -488,6 +488,7 @@ struct ldap { #ifdef LDAP_R_COMPILE LDAP_V ( ldap_pvt_thread_mutex_t ) ldap_int_resolv_mutex; +LDAP_V ( ldap_pvt_thread_mutex_t ) ldap_int_hostname_mutex; #ifdef HAVE_CYRUS_SASL LDAP_V( ldap_pvt_thread_mutex_t ) ldap_int_sasl_mutex; diff --git a/libraries/libldap/util-int.c b/libraries/libldap/util-int.c index 85f13fcedd..f451cc541c 100644 --- a/libraries/libldap/util-int.c +++ b/libraries/libldap/util-int.c @@ -58,6 +58,7 @@ extern int h_errno; #else # include ldap_pvt_thread_mutex_t ldap_int_resolv_mutex; + ldap_pvt_thread_mutex_t ldap_int_hostname_mutex; # if (defined( HAVE_CTIME_R ) || defined( HAVE_REENTRANT_FUNCTIONS)) \ && defined( CTIME_R_NARGS ) @@ -603,6 +604,8 @@ void ldap_int_utils_init( void ) #endif ldap_pvt_thread_mutex_init( &ldap_int_resolv_mutex ); + ldap_pvt_thread_mutex_init( &ldap_int_hostname_mutex ); + #ifdef HAVE_CYRUS_SASL ldap_pvt_thread_mutex_init( &ldap_int_sasl_mutex ); #endif -- 2.39.5