linux/arch/powerpc/include/asm/stackprotector.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/*
   3 * GCC stack protector support.
   4 *
   5 */
   6
   7#ifndef _ASM_STACKPROTECTOR_H
   8#define _ASM_STACKPROTECTOR_H
   9
  10#include <linux/random.h>
  11#include <linux/version.h>
  12#include <asm/reg.h>
  13#include <asm/current.h>
  14#include <asm/paca.h>
  15
  16/*
  17 * Initialize the stackprotector canary value.
  18 *
  19 * NOTE: this must only be called from functions that never return,
  20 * and it must always be inlined.
  21 */
  22static __always_inline void boot_init_stack_canary(void)
  23{
  24        unsigned long canary;
  25
  26        /* Try to get a semi random initial value. */
  27        canary = get_random_canary();
  28        canary ^= mftb();
  29        canary ^= LINUX_VERSION_CODE;
  30        canary &= CANARY_MASK;
  31
  32        current->stack_canary = canary;
  33#ifdef CONFIG_PPC64
  34        get_paca()->canary = canary;
  35#endif
  36}
  37
  38#endif  /* _ASM_STACKPROTECTOR_H */
  39