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. --- csu/libc-tls.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'csu') diff --git a/csu/libc-tls.c b/csu/libc-tls.c index d6425e0189..235ac798ed 100644 --- a/csu/libc-tls.c +++ b/csu/libc-tls.c @@ -175,7 +175,7 @@ __libc_setup_tls (size_t tcbsize, size_t tcbalign) #else # error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined" #endif - _dl_static_dtv[2].pointer.is_static = true; + _dl_static_dtv[2].pointer.to_free = NULL; /* sbrk gives us zero'd memory, so we don't need to clear the remainder. */ memcpy (_dl_static_dtv[2].pointer.val, initimage, filesz); -- cgit 1.4.1