mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-10 05:03:06 +03:00
elf: Disable most of TLS modid gaps processing [BZ #27135]
Revert "elf: Fix DTV gap reuse logic [BZ #27135]"
This reverts commit 572bd547d5
.
It turns out that the _dl_next_tls_modid in _dl_map_object_from_fd keeps
returning the same modid over and over again if there is a gap and
more than TLS-using module is loaded in one dlopen call. This corrupts
TLS data structures. The bug is still present after a revert, but
empirically it is much more difficult to trigger (because it involves a
dlopen failure).
This commit is contained in:
@@ -899,6 +899,16 @@ no more namespaces available for dlmopen()"));
|
||||
state if relocation failed, for example. */
|
||||
if (args.map)
|
||||
{
|
||||
/* Maybe some of the modules which were loaded use TLS.
|
||||
Since it will be removed in the following _dl_close call
|
||||
we have to mark the dtv array as having gaps to fill the
|
||||
holes. This is a pessimistic assumption which won't hurt
|
||||
if not true. There is no need to do this when we are
|
||||
loading the auditing DSOs since TLS has not yet been set
|
||||
up. */
|
||||
if ((mode & __RTLD_AUDIT) == 0)
|
||||
GL(dl_tls_dtv_gaps) = true;
|
||||
|
||||
_dl_close_worker (args.map, true);
|
||||
|
||||
/* All l_nodelete_pending objects should have been deleted
|
||||
|
Reference in New Issue
Block a user