From a2ff21f825adb8821eeb6145197fa8b9a8a60a58 Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Wed, 3 Aug 2016 16:15:38 +0200 Subject: elf: Avoid using memalign for TLS allocations [BZ #17730] Instead of a flag which indicates the pointer can be freed, dtv_t now includes the pointer which should be freed. Due to padding, the size of dtv_t does not increase. To avoid using memalign, the new allocate_dtv_entry function allocates a sufficiently large buffer so that a sub-buffer can be found in it which starts with an aligned pointer. Both the aligned and original pointers are kept, the latter for calling free later. --- nptl/allocatestack.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'nptl') diff --git a/nptl/allocatestack.c b/nptl/allocatestack.c index 6b42b11d5a..60b34dc6fc 100644 --- a/nptl/allocatestack.c +++ b/nptl/allocatestack.c @@ -245,9 +245,7 @@ get_cached_stack (size_t *sizep, void **memp) /* Clear the DTV. */ dtv_t *dtv = GET_DTV (TLS_TPADJ (result)); for (size_t cnt = 0; cnt < dtv[-1].counter; ++cnt) - if (! dtv[1 + cnt].pointer.is_static - && dtv[1 + cnt].pointer.val != TLS_DTV_UNALLOCATED) - free (dtv[1 + cnt].pointer.val); + free (dtv[1 + cnt].pointer.to_free); memset (dtv, '\0', (dtv[-1].counter + 1) * sizeof (dtv_t)); /* Re-initialize the TLS. */ -- cgit 1.4.1