#include #include #include "pthread_impl.h" // Sacrifice 8 bits of entropy to mitigate non-terminated C string overflows static const uintptr_t canary_mask = __BYTE_ORDER == __BIG_ENDIAN ? 0x00ffffffffffffffUL : 0xffffffffffffff00UL ; uintptr_t __stack_chk_guard; void __init_ssp(void *entropy) { if (entropy) memcpy(&__stack_chk_guard, entropy, sizeof(uintptr_t)); else __stack_chk_guard = (uintptr_t)&__stack_chk_guard * 1103515245; __pthread_self()->canary = __stack_chk_guard & canary_mask; } void __stack_chk_fail(void) { a_crash(); } hidden void __stack_chk_fail_local(void); weak_alias(__stack_chk_fail, __stack_chk_fail_local);