1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * GCC stack protector support. 4 * 5 * Stack protector works by putting predefined pattern at the start of 6 * the stack frame and verifying that it hasn't been overwritten when 7 * returning from the function. The pattern is called stack canary and 8 * on LoongArch gcc expects it to be defined by a global variable called 9 * "__stack_chk_guard". 10 */ 11 12 #ifndef _ASM_STACKPROTECTOR_H 13 #define _ASM_STACKPROTECTOR_H 14 15 extern unsigned long __stack_chk_guard; 16 17 /* 18 * Initialize the stackprotector canary value. 19 * 20 * NOTE: this must only be called from functions that never return, 21 * and it must always be inlined. 22 */ 23 static __always_inline void boot_init_stack_canary(void) 24 { 25 unsigned long canary = get_random_canary(); 26 27 current->stack_canary = canary; 28 __stack_chk_guard = current->stack_canary; 29 } 30 31 #endif /* _ASM_STACKPROTECTOR_H */ 32