[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
FW: atexit-handler causes segfault when dlopen-ed libldap is unloaded prior to program termination (ITS#1577)
- To: <openldap-devel@OpenLDAP.org>
- Subject: FW: atexit-handler causes segfault when dlopen-ed libldap is unloaded prior to program termination (ITS#1577)
- From: "Howard Chu" <hyc@highlandsun.com>
- Date: Mon, 4 Feb 2002 16:13:19 -0800
- Importance: Normal
Perhaps we should instead have a public ldap_pvt_destroy() function that
callers explicitly used to clean up the LDAP library?
-- Howard Chu
Chief Architect, Symas Corp. Director, Highland Sun
http://www.symas.com http://highlandsun.com/hyc
Symas: Premier OpenSource Development and Support
-----Original Message-----
From: owner-openldap-bugs@OpenLDAP.org
[mailto:owner-openldap-bugs@OpenLDAP.org] On Behalf Of argggh@linpro.no
Sent: Monday, February 04, 2002 1:24 AM
To: openldap-its@OpenLDAP.org
Subject: atexit-handler causes segfault when dlopen-ed libldap is
unloaded prior to program termination (ITS#1577)
Full_Name: Arne Georg Gleditsch
Version: 2.0.21
OS: GNU/Linux
URL:
Submission from: (NULL) (213.203.57.130)
openldap-2.0.21/libraries/libldap/init.c contains the statement
"atexit(ldap_int_destroy_global_options)". This causes programs
that load and unload libldap using dlopen to segfault upon termination because
one of the exit handlers reside in now unmapped memory. Trivial example
program:
#include <stdio.h>
#include <dlfcn.h>
int main() {
void *(* ldap_init)(const char *, int);
void *ldap = NULL;
char *error;
void *handle = dlopen("libldap.so.2", RTLD_LAZY);
if (error = dlerror()) {
printf("%s\n", error);
exit();
}
ldap_init = dlsym(handle, "ldap_init");
if (error = dlerror()) {
printf("%s\n", error);
exit();
}
printf("libldap loaded.\n");
ldap_init("localhost", 389);
dlclose(handle);
printf("libldap unloaded.\n");
}
This is a real problem with pam-ldap, as su is now segfaulting at exit on my
systems. Other services are likely affected as well.