From: Frederik Deweerdt Date: Fri, 11 May 2012 21:05:21 +0000 (-0700) Subject: ITS#7270 Protect accesses to ldap_int_hostname with a mutex. X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=8bb9e88d5f8731fe73c47ba3eb8812a410dbb85c;p=openldap 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. --- 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