mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-30 22:43:12 +03:00
Always check dtv before freeing dtv[-1]
This commit is contained in:
@ -1,3 +1,10 @@
|
||||
2012-09-06 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
[BZ #14545]
|
||||
* csu/libc-tls.c (_dl_initial_dtv): New variable.
|
||||
* elf/dl-tls.c (_dl_deallocate_tls): Always check dtv before
|
||||
freeing dtv[-1].
|
||||
|
||||
2012-09-06 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
[BZ #14544]
|
||||
|
@ -65,6 +65,8 @@ size_t _dl_tls_static_size = 2048;
|
||||
size_t _dl_tls_static_used;
|
||||
/* Alignment requirement of the static TLS block. */
|
||||
size_t _dl_tls_static_align;
|
||||
/* Initial dtv of the main thread, not allocated with normal malloc. */
|
||||
void *_dl_initial_dtv = &static_dtv[1];
|
||||
|
||||
/* Generation counter for the dtv. */
|
||||
size_t _dl_tls_generation;
|
||||
|
@ -477,9 +477,7 @@ _dl_deallocate_tls (void *tcb, bool dealloc_tcb)
|
||||
free (dtv[1 + cnt].pointer.val);
|
||||
|
||||
/* The array starts with dtv[-1]. */
|
||||
#ifdef SHARED
|
||||
if (dtv != GL(dl_initial_dtv))
|
||||
#endif
|
||||
free (dtv - 1);
|
||||
|
||||
if (dealloc_tcb)
|
||||
|
Reference in New Issue
Block a user