37 lines
1.2 KiB
Diff
37 lines
1.2 KiB
Diff
From 0e1e4be3ae95cb72855c0223b4ff5f52adec395c 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 48/62] 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 | 4 ++++
|
|
1 file changed, 4 insertions(+)
|
|
|
|
diff --git a/arch/powerpc/include/asm/stackprotector.h b/arch/powerpc/include/asm/stackprotector.h
|
|
index 1c8460e23583..b1653c160bab 100644
|
|
--- a/arch/powerpc/include/asm/stackprotector.h
|
|
+++ b/arch/powerpc/include/asm/stackprotector.h
|
|
@@ -24,7 +24,11 @@ static __always_inline void boot_init_stack_canary(void)
|
|
unsigned long canary;
|
|
|
|
/* Try to get a semi random initial value. */
|
|
+#ifdef CONFIG_PREEMPT_RT
|
|
+ canary = (unsigned long)&canary;
|
|
+#else
|
|
canary = get_random_canary();
|
|
+#endif
|
|
canary ^= mftb();
|
|
canary ^= LINUX_VERSION_CODE;
|
|
canary &= CANARY_MASK;
|
|
--
|
|
2.43.0
|
|
|