[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
Re: atexit-handler causes segfault when dlopen-ed libldap is unloaded prior to program termination (ITS#1577)
A preliminary fix is available in HEAD.
A workaround has also been made to OPENLDAP_REL_ENG_2
(disabled registration of atexit() routine).
Please test.
Kurt
At 01:23 AM 2002-02-04, argggh@linpro.no wrote:
>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.