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 (1140B)


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