[Date Prev][Date Next] [Chronological] [Thread] [Top]

(ITS#4436) Freeing invalid pointer - GLIBC 2.4



Full_Name: Jiri Netolicky
Version: 2.2.28-r4
OS: Gentoo 2006.0
URL: 
Submission from: (NULL) (82.117.130.2)


To day I have upgraded GLIBC into 2.4 version. All ldap client utils stops work.
Glibc wrote message like:
*** glibc detected *** ldapmodify: munmap_chunk(): invalid pointer: 0xbfc11582
***

I am using param SASL_AUTHCID in my .ldaprc. The problem is in init.c line 556.
There is fill

gopts->ldo_def_sasl_authcid = user

where the user is DIRECTLY from getenv("USER").

After that when is readed .ldaprc in function openldap_ldap_init_w_conf, the
sasl_authcid is freed when it's not null. But freeing strings from getenv seems
to be checked in new version of GLIBC.
I think the best solution will be make a copy of user name like this:

gopts->ldo_def_sasl_authcid = LDAP_STRDUP(user);

After this small patch works everything fine.

--- openldap-2.2.28/libraries/libldap/init.c    2005-01-20 18:01:01.000000000
+0100
+++ openldap-2.2.28-patch/libraries/libldap/init.c      2006-03-14
17:17:13.000000000 +0100
@@ -553,7 +553,7 @@
                if( user == NULL ) user = getenv("LOGNAME");
 
                if( user != NULL ) {
-                       gopts->ldo_def_sasl_authcid = user;
+                       gopts->ldo_def_sasl_authcid = LDAP_STRDUP(user);
                }
     }
 #endif