about summary refs log tree commit diff
path: root/elf/rtld.c
diff options
context:
space:
mode:
authorFangrui Song <maskray@google.com>2021-01-11 23:56:32 -0800
committerFangrui Song <maskray@google.com>2021-01-11 23:56:32 -0800
commit0b11ca56fe0473a41a6e9cdc5d228c7d1e0d6d72 (patch)
tree6d9013a7b236e33deee47f247f71aa60eec06477 /elf/rtld.c
parent87d583c6e8cd0e49f64da76636ebeec033298b4d (diff)
downloadglibc-0b11ca56fe0473a41a6e9cdc5d228c7d1e0d6d72.tar.gz
glibc-0b11ca56fe0473a41a6e9cdc5d228c7d1e0d6d72.tar.xz
glibc-0b11ca56fe0473a41a6e9cdc5d228c7d1e0d6d72.zip
Unconditionally define __stack_chk_guard [BZ #26817] maskray/stack_chk_guard
__stack_chk_guard is currently unavailable on architectures which define
THREAD_SET_STACK_GUARD, so {gcc,clang} -fstack-protector
-mstack-protector-guard=global will fail to link due to the undefined
symbol.

Define __stack_chk_guard to make -mstack-protector-guard=global compiled
user programs work. `#define THREAD_SET_STACK_GUARD` code is moved
outside of `#ifndef __ASSEMBLER__` so that cpp can preprocess
elf/Versions.
Diffstat (limited to 'elf/rtld.c')
-rw-r--r--elf/rtld.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/elf/rtld.c b/elf/rtld.c
index 8d9add90e3..cd70428c46 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -154,11 +154,8 @@ unsigned int _dl_skip_args attribute_relro attribute_hidden;
 #endif
 rtld_hidden_data_def (_dl_argv)
 
-#ifndef THREAD_SET_STACK_GUARD
-/* Only exported for architectures that don't store the stack guard canary
-   in thread local area.  */
+/* Also export to architectures which prefer -mstack-protector-guard=tls.  */
 uintptr_t __stack_chk_guard attribute_relro;
-#endif
 
 /* Only exported for architectures that don't store the pointer guard
    value in thread local area.  */
@@ -865,9 +862,8 @@ security_init (void)
   uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random);
 #ifdef THREAD_SET_STACK_GUARD
   THREAD_SET_STACK_GUARD (stack_chk_guard);
-#else
-  __stack_chk_guard = stack_chk_guard;
 #endif
+  __stack_chk_guard = stack_chk_guard;
 
   /* Set up the pointer guard as well, if necessary.  */
   uintptr_t pointer_chk_guard