From: H.J. Lu Date: Wed, 5 Sep 2012 19:24:37 +0000 (-0700) Subject: Always check dtv before freeing dtv[-1] X-Git-Tag: upstream/2.20~3333 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0948c3af9dfb3bc1312d6bed2f3a6bfd4e96eef4;p=platform%2Fupstream%2Flinaro-glibc.git Always check dtv before freeing dtv[-1] --- diff --git a/ChangeLog b/ChangeLog index 08fa5a1..7385bcb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2012-09-06 H.J. Lu + [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 + [BZ #14544] * Makeconfig (link-static-before-libc): Replace $(+prector) with $(+prectorT). diff --git a/csu/libc-tls.c b/csu/libc-tls.c index b00a5cc..eb9c502 100644 --- a/csu/libc-tls.c +++ b/csu/libc-tls.c @@ -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; diff --git a/elf/dl-tls.c b/elf/dl-tls.c index 4138312..ff59e9e 100644 --- a/elf/dl-tls.c +++ b/elf/dl-tls.c @@ -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)