40 lines
1.3 KiB
Diff
40 lines
1.3 KiB
Diff
From 30a2093bd995e7c7ecf709b2c0f1f074f387c02e Mon Sep 17 00:00:00 2001
|
|
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
|
|
Date: Tue, 26 Mar 2019 18:31:29 +0100
|
|
Subject: [PATCH 187/196] powerpc/stackprotector: work around stack-guard init
|
|
from atomic
|
|
|
|
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>
|
|
---
|
|
arch/powerpc/include/asm/stackprotector.h | 7 ++++++-
|
|
1 file changed, 6 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/arch/powerpc/include/asm/stackprotector.h b/arch/powerpc/include/asm/stackprotector.h
|
|
index 283c34647856..4727f40052dd 100644
|
|
--- a/arch/powerpc/include/asm/stackprotector.h
|
|
+++ b/arch/powerpc/include/asm/stackprotector.h
|
|
@@ -19,8 +19,13 @@
|
|
*/
|
|
static __always_inline void boot_init_stack_canary(void)
|
|
{
|
|
- unsigned long canary = get_random_canary();
|
|
+ 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;
|
|
--
|
|
2.43.2
|
|
|