1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-01 10:06:57 +03:00

Fix recursive dlopen.

The ability to recursively call dlopen is useful for malloc
implementations that wish to load other dynamic modules that
implement reentrant/AS-safe functions to use in their own
implementation.

Given that a user malloc implementation may be called by an
ongoing dlopen to allocate memory the user malloc
implementation interrupts dlopen and if it calls dlopen again
that's a reentrant call.

This patch fixes the issues with the ld.so.cache mapping
and the _r_debug assertion which prevent this from working
as expected.

See:
https://sourceware.org/ml/libc-alpha/2014-12/msg00446.html
This commit is contained in:
Carlos O'Donell
2015-01-21 01:51:10 -05:00
parent 042e1521c7
commit ccdb048df4
10 changed files with 222 additions and 21 deletions

View File

@ -905,8 +905,8 @@ extern const struct r_strlenpair *_dl_important_hwcaps (const char *platform,
internal_function;
/* Look up NAME in ld.so.cache and return the file name stored there,
or null if none is found. */
extern const char *_dl_load_cache_lookup (const char *name)
or null if none is found. Caller must free returned string. */
extern char *_dl_load_cache_lookup (const char *name)
internal_function;
/* If the system does not support MAP_COPY we cannot leave the file open