stackprotector.h (705B)
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 8extern 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 */ 16static __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 */