]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#9069 Do not call gnutls_global_set_mutex()
authorRyan Tandy <ryan@nardis.ca>
Wed, 28 Aug 2019 00:58:44 +0000 (17:58 -0700)
committerQuanah Gibson-Mount <quanah@openldap.org>
Thu, 21 Nov 2019 20:24:13 +0000 (20:24 +0000)
Since GnuTLS moved to implicit initialization on library load, calling
this function deinitializes GnuTLS and then re-initializes it.

When GnuTLS uses /dev/urandom as an entropy source (getrandom() not
available, or older versions of GnuTLS), and the application closed all
file descriptors at startup, this could result in GnuTLS opening
/dev/urandom over one of the application's file descriptors when
re-initialized.

Additionally, the custom mutex functions are never reset, so if libldap
is unloaded (for example via dlclose()) after calling this, its code may
be unmapped and the application could crash when GnuTLS calls the mutex
functions.

On typical systems, GnuTLS system mutexes are probably the same as what
libldap uses anyway.

libraries/libldap/tls_g.c

index f3b4cd710667189189ab8b164cef20beed1fa817..f52ee4fb3d0b3a178c0a8212e7b966bc9b847daa 100644 (file)
@@ -67,51 +67,10 @@ static int tlsg_cert_verify( tlsg_session *s );
 
 #ifdef LDAP_R_COMPILE
 
-static int
-tlsg_mutex_init( void **priv )
-{
-       int err = 0;
-       ldap_pvt_thread_mutex_t *lock = LDAP_MALLOC( sizeof( ldap_pvt_thread_mutex_t ));
-
-       if ( !lock )
-               err = ENOMEM;
-       if ( !err ) {
-               err = ldap_pvt_thread_mutex_init( lock );
-               if ( err )
-                       LDAP_FREE( lock );
-               else
-                       *priv = lock;
-       }
-       return err;
-}
-
-static int
-tlsg_mutex_destroy( void **lock )
-{
-       int err = ldap_pvt_thread_mutex_destroy( *lock );
-       LDAP_FREE( *lock );
-       return err;
-}
-
-static int
-tlsg_mutex_lock( void **lock )
-{
-       return ldap_pvt_thread_mutex_lock( *lock );
-}
-
-static int
-tlsg_mutex_unlock( void **lock )
-{
-       return ldap_pvt_thread_mutex_unlock( *lock );
-}
-
 static void
 tlsg_thr_init( void )
 {
-       gnutls_global_set_mutex (tlsg_mutex_init,
-               tlsg_mutex_destroy,
-               tlsg_mutex_lock,
-               tlsg_mutex_unlock);
+       /* do nothing */
 }
 #endif /* LDAP_R_COMPILE */