f6012060cf
This is invoked from the secondary CPU in atomic context. On x86 we use tsc instead. On Power we XOR it against mftb() so lets use stack address as the initial value. Cc: stable-rt@vger.kernel.org Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
36 lines
702 B
C
36 lines
702 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* GCC stack protector support.
|
|
*
|
|
*/
|
|
|
|
#ifndef _ASM_STACKPROTECTOR_H
|
|
#define _ASM_STACKPROTECTOR_H
|
|
|
|
#include <asm/reg.h>
|
|
#include <asm/current.h>
|
|
#include <asm/paca.h>
|
|
|
|
/*
|
|
* Initialize the stackprotector canary value.
|
|
*
|
|
* NOTE: this must only be called from functions that never return,
|
|
* and it must always be inlined.
|
|
*/
|
|
static __always_inline void boot_init_stack_canary(void)
|
|
{
|
|
unsigned long canary;
|
|
|
|
#ifndef CONFIG_PREEMPT_RT
|
|
canary = get_random_canary();
|
|
#else
|
|
canary = ((unsigned long)&canary) & CANARY_MASK;
|
|
#endif
|
|
current->stack_canary = canary;
|
|
#ifdef CONFIG_PPC64
|
|
get_paca()->canary = canary;
|
|
#endif
|
|
}
|
|
|
|
#endif /* _ASM_STACKPROTECTOR_H */
|