1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef _ASM_STACKPROTECTOR_H 3 #define _ASM_STACKPROTECTOR_H 1 4 5 #include <linux/random.h> 6 #include <linux/version.h> 7 8 extern unsigned long __stack_chk_guard; 9 10 /* 11 * Initialize the stackprotector canary value. 12 * 13 * NOTE: this must only be called from functions that never return, 14 * and it must always be inlined. 15 */ 16 static __always_inline void boot_init_stack_canary(void) 17 { 18 unsigned long canary; 19 20 /* Try to get a semi random initial value. */ 21 get_random_bytes(&canary, sizeof(canary)); 22 canary ^= LINUX_VERSION_CODE; 23 canary &= CANARY_MASK; 24 25 current->stack_canary = canary; 26 __stack_chk_guard = current->stack_canary; 27 } 28 29 #endif /* __ASM_SH_STACKPROTECTOR_H */ 30