cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

stackprotector.h (1177B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * GCC stack protector support.
      4 *
      5 * (This is directly adopted from the ARM implementation)
      6 *
      7 * Stack protector works by putting predefined pattern at the start of
      8 * the stack frame and verifying that it hasn't been overwritten when
      9 * returning from the function.  The pattern is called stack canary
     10 * and gcc expects it to be defined by a global variable called
     11 * "__stack_chk_guard" on MIPS.  This unfortunately means that on SMP
     12 * we cannot have a different canary value per task.
     13 */
     14
     15#ifndef _ASM_STACKPROTECTOR_H
     16#define _ASM_STACKPROTECTOR_H 1
     17
     18#include <linux/random.h>
     19#include <linux/version.h>
     20
     21extern unsigned long __stack_chk_guard;
     22
     23/*
     24 * Initialize the stackprotector canary value.
     25 *
     26 * NOTE: this must only be called from functions that never return,
     27 * and it must always be inlined.
     28 */
     29static __always_inline void boot_init_stack_canary(void)
     30{
     31	unsigned long canary;
     32
     33	/* Try to get a semi random initial value. */
     34	get_random_bytes(&canary, sizeof(canary));
     35	canary ^= LINUX_VERSION_CODE;
     36
     37	current->stack_canary = canary;
     38	__stack_chk_guard = current->stack_canary;
     39}
     40
     41#endif	/* _ASM_STACKPROTECTOR_H */