sh/boot: add static stack-protector to pre-kernel
authorKees Cook <[email protected]>
Fri, 17 Nov 2017 23:26:59 +0000 (15:26 -0800)
committerLinus Torvalds <[email protected]>
Sat, 18 Nov 2017 00:10:00 +0000 (16:10 -0800)
The sh decompressor code triggers stack-protector code generation when
using CONFIG_CC_STACKPROTECTOR_STRONG.  As done for arm and mips, add a
simple static stack-protector canary.  As this wasn't protected before,
the risk of using a weak canary is minimized.  Once the kernel is
actually up, a better canary is chosen.

Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Kees Cook <[email protected]>
Cc: Yoshinori Sato <[email protected]>
Cc: Rich Felker <[email protected]>
Cc: Al Viro <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Laura Abbott <[email protected]>
Cc: Masahiro Yamada <[email protected]>
Cc: Michal Marek <[email protected]>
Cc: Nicholas Piggin <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
arch/sh/boot/compressed/misc.c

index f2d9d3079d4e623fdcaf69730651d43da37b3fad..627ce8e75e016422102f0572c564bef3df2958b2 100644 (file)
@@ -104,6 +104,18 @@ static void error(char *x)
        while(1);       /* Halt */
 }
 
+unsigned long __stack_chk_guard;
+
+void __stack_chk_guard_setup(void)
+{
+       __stack_chk_guard = 0x000a0dff;
+}
+
+void __stack_chk_fail(void)
+{
+       error("stack-protector: Kernel stack is corrupted\n");
+}
+
 #ifdef CONFIG_SUPERH64
 #define stackalign     8
 #else
@@ -118,6 +130,8 @@ void decompress_kernel(void)
 {
        unsigned long output_addr;
 
+       __stack_chk_guard_setup();
+
 #ifdef CONFIG_SUPERH64
        output_addr = (CONFIG_MEMORY_START + 0x2000);
 #else