File tree Expand file tree Collapse file tree 4 files changed +51
-0
lines changed Expand file tree Collapse file tree 4 files changed +51
-0
lines changed Original file line number Diff line number Diff line change @@ -163,6 +163,7 @@ config PPC
163
163
select HAVE_VIRT_CPU_ACCOUNTING
164
164
select HAVE_ARCH_HARDENED_USERCOPY
165
165
select HAVE_KERNEL_GZIP
166
+ select HAVE_CC_STACKPROTECTOR
166
167
167
168
config GENERIC_CSUM
168
169
def_bool CPU_LITTLE_ENDIAN
Original file line number Diff line number Diff line change
1
+ /*
2
+ * GCC stack protector support.
3
+ *
4
+ * Stack protector works by putting predefined pattern at the start of
5
+ * the stack frame and verifying that it hasn't been overwritten when
6
+ * returning from the function. The pattern is called stack canary
7
+ * and gcc expects it to be defined by a global variable called
8
+ * "__stack_chk_guard" on PPC. This unfortunately means that on SMP
9
+ * we cannot have a different canary value per task.
10
+ */
11
+
12
+ #ifndef _ASM_STACKPROTECTOR_H
13
+ #define _ASM_STACKPROTECTOR_H
14
+
15
+ #include <linux/random.h>
16
+ #include <linux/version.h>
17
+ #include <asm/reg.h>
18
+
19
+ extern unsigned long __stack_chk_guard ;
20
+
21
+ /*
22
+ * Initialize the stackprotector canary value.
23
+ *
24
+ * NOTE: this must only be called from functions that never return,
25
+ * and it must always be inlined.
26
+ */
27
+ static __always_inline void boot_init_stack_canary (void )
28
+ {
29
+ unsigned long canary ;
30
+
31
+ /* Try to get a semi random initial value. */
32
+ get_random_bytes (& canary , sizeof (canary ));
33
+ canary ^= mftb ();
34
+ canary ^= LINUX_VERSION_CODE ;
35
+
36
+ current -> stack_canary = canary ;
37
+ __stack_chk_guard = current -> stack_canary ;
38
+ }
39
+
40
+ #endif /* _ASM_STACKPROTECTOR_H */
Original file line number Diff line number Diff line change @@ -19,6 +19,10 @@ CFLAGS_init.o += $(DISABLE_LATENT_ENTROPY_PLUGIN)
19
19
CFLAGS_btext.o += $(DISABLE_LATENT_ENTROPY_PLUGIN )
20
20
CFLAGS_prom.o += $(DISABLE_LATENT_ENTROPY_PLUGIN )
21
21
22
+ # -fstack-protector triggers protection checks in this code,
23
+ # but it is being used too early to link to meaningful stack_chk logic.
24
+ CFLAGS_prom_init.o += $(call cc-option, -fno-stack-protector)
25
+
22
26
ifdef CONFIG_FUNCTION_TRACER
23
27
# Do not trace early boot code
24
28
CFLAGS_REMOVE_cputable.o = -mno-sched-epilog $(CC_FLAGS_FTRACE )
Original file line number Diff line number Diff line change 64
64
#include <linux/kprobes.h>
65
65
#include <linux/kdebug.h>
66
66
67
+ #ifdef CONFIG_CC_STACKPROTECTOR
68
+ #include <linux/stackprotector.h>
69
+ unsigned long __stack_chk_guard __read_mostly ;
70
+ EXPORT_SYMBOL (__stack_chk_guard );
71
+ #endif
72
+
67
73
/* Transactional Memory debug */
68
74
#ifdef TM_DEBUG_SW
69
75
#define TM_DEBUG (x ...) printk(KERN_INFO x)
You can’t perform that action at this time.
0 commit comments