1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-08 17:42:12 +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:
Florian Weimer
2021-06-25 08:09:08 +02:00
parent 66db95b6e8
commit 40ebfd016a
3 changed files with 15 additions and 6 deletions

View File

@@ -191,7 +191,10 @@ _dl_next_tls_modid (void)
size_t
_dl_count_modids (void)
{
/* The count is the max unless dlclose or failed dlopen created gaps. */
/* It is rare that we have gaps; see elf/dl-open.c (_dl_open) where
we fail to load a module and unload it leaving a gap. If we don't
have gaps then the number of modids is the current maximum so
return that. */
if (__glibc_likely (!GL(dl_tls_dtv_gaps)))
return GL(dl_tls_max_dtv_idx);