mirror of
https://sourceware.org/git/glibc.git
synced 2026-01-06 11:51:29 +03:00
nptl: Fix pthread_getattr_np when modules with execstack are allowed (BZ 32897)
The BZ 32653 fix (12a497c716) kept the stack pointer zeroing from make_main_stack_executable on _dl_make_stack_executable. However, previously the 'stack_endp' pointed to temporary variable created before the call of _dl_map_object_from_fd; while now we use the __libc_stack_end directly. Since pthread_getattr_np relies on correct __libc_stack_end, if _dl_make_stack_executable is called (for instance, when glibc.rtld.execstack=2 is set) __libc_stack_end will be set to zero, and the call will always fail. The __libc_stack_end zero was used a mitigation hardening, but since52a01100adit is used solely on pthread_getattr_np code. So there is no point in zeroing anymore. Checked on x86_64-linux-gnu and i686-linux-gnu. Reviewed-by: Sam James <sam@gentoo.org>
This commit is contained in:
@@ -19,10 +19,10 @@
|
||||
#include <ldsodefs.h>
|
||||
|
||||
int
|
||||
_dl_make_stack_executable (void **stack_endp)
|
||||
_dl_make_stack_executable (const void *stack_endp)
|
||||
{
|
||||
/* This gives us the highest/lowest page that needs to be changed. */
|
||||
uintptr_t page = ((uintptr_t) *stack_endp
|
||||
uintptr_t page = ((uintptr_t) stack_endp
|
||||
& -(intptr_t) GLRO(dl_pagesize));
|
||||
|
||||
if (__mprotect ((void *) page, GLRO(dl_pagesize),
|
||||
@@ -35,9 +35,6 @@ _dl_make_stack_executable (void **stack_endp)
|
||||
) != 0)
|
||||
return errno;
|
||||
|
||||
/* Clear the address. */
|
||||
*stack_endp = NULL;
|
||||
|
||||
/* Remember that we changed the permission. */
|
||||
GL(dl_stack_flags) |= PF_X;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user