glibc/sysdeps/x86_64
Florian Weimer 549e7f7c5a elf: Support recursive use of dynamic TLS in interposed malloc
It turns out that quite a few applications use bundled mallocs that
have been built to use global-dynamic TLS (instead of the recommended
initial-exec TLS).  The previous workaround from
commit afe42e935b ("elf: Avoid some
free (NULL) calls in _dl_update_slotinfo") does not fix all
encountered cases unfortunatelly.

This change avoids the TLS generation update for recursive use
of TLS from a malloc that was called during a TLS update.  This
is possible because an interposed malloc has a fixed module ID and
TLS slot.  (It cannot be unloaded.)  If an initially-loaded module ID
is encountered in __tls_get_addr and the dynamic linker is already
in the middle of a TLS update, use the outdated DTV, thus avoiding
another call into malloc.  It's still necessary to update the
DTV to the most recent generation, to get out of the slow path,
which is why the check for recursion is needed.

The bookkeeping is done using a global counter instead of per-thread
flag because TLS access in the dynamic linker is tricky.

All this will go away once the dynamic linker stops using malloc
for TLS, likely as part of a change that pre-allocates all TLS
during pthread_create/dlopen.

Fixes commit d2123d6827 ("elf: Fix slow
tls access after dlopen [BZ #19924]").

Reviewed-by: Szabolcs Nagy <szabolcs.nagy@arm.com>
(cherry picked from commit 018f0fc3b8)
2025-01-10 16:49:38 -08:00
..
64 ld.so: Always use MAP_COPY to map the first segment [BZ #30452] 2023-06-30 10:42:42 -07:00
fpu x86_64: Add log1p with FMA 2025-01-09 07:31:04 -08:00
htl htl: Add tcb-offsets.sym for x86_64 2023-04-03 01:15:30 +02:00
multiarch x86/string: Fixup alignment of main loop in str{n}cmp-evex [BZ #32212] 2025-01-09 17:23:28 -08:00
nptl nptl: move tst-x86-64-tls-1 to nptl-only tests 2023-05-01 12:59:33 +02:00
sys hurd: Add sys/ucontext.h and sigcontext.h for x86_64 2023-04-10 20:11:43 +02:00
x32 Parameterize op_t from memcopy.h 2023-02-06 16:19:35 -03:00
Implies
Makefile nptl: move tst-x86-64-tls-1 to nptl-only tests 2023-05-01 12:59:33 +02:00
Versions
____longjmp_chk.S
__longjmp.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
_mcount.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
abort-instr.h
add_n.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
addmul_1.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
bsd-_setjmp.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
bsd-setjmp.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
configure configure: Use autoconf 2.71 2023-07-17 10:08:10 -04:00
configure.ac
crti.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
crtn.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-cache.h x86: Make dl-cache.h and readelflib.c not Linux-specific 2023-06-26 10:04:31 -03:00
dl-hwcaps-subdirs.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-irel.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-machine.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-procinfo.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-runtime.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-tls.c elf: Support recursive use of dynamic TLS in interposed malloc 2025-01-10 16:49:38 -08:00
dl-tls.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-tlsdesc.S x86-64: Fix the tcb field load for x32 [BZ #31185] 2023-12-23 06:08:14 -08:00
dl-tlsdesc.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-trampoline.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
dl-trampoline.h Fix misspellings in sysdeps/x86_64 -- BZ 25337. 2023-05-23 10:25:11 +00:00
ffs.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
ffsll.c x86_64: Optimize ffsll function code size. 2024-01-31 18:31:28 -08:00
ifuncmain8.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
ifuncmod8.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
isa-default-impl.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
isa.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
jmpbuf-offsets.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
jmpbuf-unwind.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
l10nflist.c
link-defines.sym
locale-defines.sym
localplt.data elf: Rework exception handling in the dynamic loader [BZ #25486] 2022-11-03 09:39:31 +01:00
lshift.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
machine-gmon.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
memchr.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
memcmp-isa-default-impl.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
memcmp.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
memcmpeq.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
memcpy.S x86_64: Fix build with --disable-multiarch (BZ 30721) 2023-08-17 23:37:28 +02:00
memcpy_chk.S string: Ensure *_chk routines have their hidden builtin definition available 2023-07-05 16:59:48 +02:00
memmove.S x86_64: Fix build with --disable-multiarch (BZ 30721) 2023-08-17 23:37:28 +02:00
memmove_chk.S string: Ensure *_chk routines have their hidden builtin definition available 2023-07-05 16:59:48 +02:00
mempcpy.S
mempcpy_chk.S string: Ensure *_chk routines have their hidden builtin definition available 2023-07-05 16:59:48 +02:00
memrchr.S string: Add libc_hidden_proto for memrchr 2023-02-08 17:13:58 -03:00
memset.S x86_64: Fix build with --disable-multiarch (BZ 30721) 2023-08-17 23:37:28 +02:00
memset_chk.S string: Ensure *_chk routines have their hidden builtin definition available 2023-07-05 16:59:48 +02:00
mp_clz_tab.c
mul_1.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
preconfigure configure: Use autoconf 2.71 2023-07-17 10:08:10 -04:00
preconfigure.ac
rawmemchr.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
rshift.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
rtld-offsets.sym
setjmp.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
stackguard-macros.h
stackinfo.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
start.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
stpcpy.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
stpncpy.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strcasecmp.S
strcasecmp_l-nonascii.c
strcasecmp_l.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strcat.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strchr-isa-default-impl.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strchr.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strchrnul.S string: Add libc_hidden_proto for strchrnul 2023-02-08 17:13:56 -03:00
strcmp.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strcpy.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strcspn-generic.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strcspn.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strlen.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strncase.S
strncase_l-nonascii.c
strncase_l.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strncat.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strncmp.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strncpy.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strnlen.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strpbrk-generic.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strpbrk.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strrchr.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strspn-generic.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strspn.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
sub_n.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
submul_1.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
sysdep.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tls_get_addr.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tlsdesc.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tlsdesc.sym
tst-audit.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-audit3.c
tst-audit4-aux.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-audit4.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-audit5.c
tst-audit6.c
tst-audit7.c
tst-audit10-aux.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-audit10.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-auditmod3a.c
tst-auditmod3b.c
tst-auditmod4a.c
tst-auditmod4b.c
tst-auditmod5a.c
tst-auditmod5b.c
tst-auditmod6a.c
tst-auditmod6b.c
tst-auditmod6c.c
tst-auditmod7a.c
tst-auditmod7b.c
tst-auditmod10a.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-auditmod10b.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-avx-aux.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-avx.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-avx512-aux.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-avx512.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-avx512mod.c
tst-avxmod.c
tst-glibc-hwcaps.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-platform-1.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-platformmod-1.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-platformmod-2.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-quad1.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-quad1pie.c
tst-quad2.c
tst-quad2pie.c
tst-quadmod1.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-quadmod1pie.S
tst-quadmod2.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-quadmod2pie.S
tst-rsi-strlen.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-rsi-wcslen.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-split-dynreloc.c
tst-split-dynreloc.lds
tst-sse.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-ssemod.c
varshift.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
wcpcpy-generic.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
wcpcpy.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
wcpncpy-generic.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
wcpncpy.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
wcscat-generic.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
wcscat.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
wcschr.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
wcscmp.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
wcscpy-generic.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
wcscpy.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
wcslen.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
wcsncat-generic.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
wcsncat.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
wcsncmp-generic.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
wcsncmp.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
wcsncpy-generic.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
wcsncpy.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
wcsnlen-generic.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
wcsnlen.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
wcsrchr.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
wmemchr.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
wmemcmp.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
wmemset.S
wmemset_chk.S Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
wordcopy.c
x86-lp_size.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00