2009-04-19  Ulrich Drepper  <drepper@redhat.com>
	[BZ #10069]
	* elf/dl-open.c (dl_open_worker): We cannot guarantee that we can load
	an object that uses static TLS if the TLS modid is higher than the
	reserve we always allocate.  At least for multi-threaded code.
This commit is contained in:
Ulrich Drepper 2009-04-19 21:45:02 +00:00
parent 153aa31b93
commit a245eafd2b
2 changed files with 19 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2009-04-19 Ulrich Drepper <drepper@redhat.com>
[BZ #10069]
* elf/dl-open.c (dl_open_worker): We cannot guarantee that we can load
an object that uses static TLS if the TLS modid is higher than the
reserve we always allocate. At least for multi-threaded code.
2009-04-18 Ulrich Drepper <drepper@redhat.com>
* stdlib/strfmon_l.c (__vstrfmon_l): Don't wrap when computing width.

View File

@ -490,6 +490,18 @@ dl_open_worker (void *a)
if (imap->l_need_tls_init)
{
/* For static TLS we have to allocate the memory here
and now. This includes allocating memory in the DTV.
But we cannot change any DTV other than our own. So,
if we cannot guarantee that there is room in the DTV
we don't even try it and fail the load.
XXX We could track the minimum DTV slots allocated in
all threads. */
if (! RTLD_SINGLE_THREAD_P && imap->l_tls_modid > DTV_SURPLUS)
_dl_signal_error (0, "dlopen", NULL, N_("\
cannot load any more object with static TLS"));
imap->l_need_tls_init = 0;
#ifdef SHARED
/* Update the slot information data for at least the