linux/arch/powerpc/platforms
Christophe Leroy c3ff2a5193 powerpc/32: add stack protector support
This functionality was tentatively added in the past
(commit 6533b7c16e ("powerpc: Initial stack protector
(-fstack-protector) support")) but had to be reverted
(commit f2574030b0 ("powerpc: Revert the initial stack
protector support") because of GCC implementing it differently
whether it had been built with libc support or not.

Now, GCC offers the possibility to manually set the
stack-protector mode (global or tls) regardless of libc support.

This time, the patch selects HAVE_STACKPROTECTOR only if
-mstack-protector-guard=tls is supported by GCC.

On PPC32, as register r2 points to current task_struct at
all time, the stack_canary located inside task_struct can be
used directly by using the following GCC options:
-mstack-protector-guard=tls
-mstack-protector-guard-reg=r2
-mstack-protector-guard-offset=offsetof(struct task_struct, stack_canary))

The protector is disabled for prom_init and bootx_init as
it is too early to handle it properly.

 $ echo CORRUPT_STACK > /sys/kernel/debug/provoke-crash/DIRECT
[  134.943666] Kernel panic - not syncing: stack-protector: Kernel stack is corrupted in: lkdtm_CORRUPT_STACK+0x64/0x64
[  134.943666]
[  134.955414] CPU: 0 PID: 283 Comm: sh Not tainted 4.18.0-s3k-dev-12143-ga3272be41209 #835
[  134.963380] Call Trace:
[  134.965860] [c6615d60] [c001f76c] panic+0x118/0x260 (unreliable)
[  134.971775] [c6615dc0] [c001f654] panic+0x0/0x260
[  134.976435] [c6615dd0] [c032c368] lkdtm_CORRUPT_STACK_STRONG+0x0/0x64
[  134.982769] [c6615e00] [ffffffff] 0xffffffff

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
2018-10-03 15:40:03 +10:00
..
4xx powerpc/4xx: Fix error return path in ppc4xx_msi_probe() 2018-08-03 20:08:20 +10:00
8xx powerpc/8xx: Remove RTC clock on 88x 2018-06-04 00:39:18 +10:00
40x License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
44x powerpc: Convert to using %pOFn instead of device_node.name 2018-10-03 15:40:01 +10:00
52xx powerpc/Makefiles: Convert ifeq to ifdef where possible 2018-08-08 00:32:36 +10:00
82xx License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
83xx powerpc: remove retired sbc834x support 2018-05-03 22:32:30 +10:00
85xx powerpc/platforms/85xx: fix t1042rdb_diu.c build errors & warning 2018-08-08 00:32:33 +10:00
86xx powerpc: Use pr_warn instead of pr_warning 2017-12-04 11:54:34 +11:00
512x powerpc: Use pr_warn instead of pr_warning 2017-12-04 11:54:34 +11:00
amigaone License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
cell powerpc: Convert to using %pOFn instead of device_node.name 2018-10-03 15:40:01 +10:00
chrp chrp/nvram.c: add MODULE_LICENSE() 2018-07-19 14:38:46 +10:00
embedded6xx powerpc: Convert to using %pOFn instead of device_node.name 2018-10-03 15:40:01 +10:00
maple powerpc: use time64_t in read_persistent_clock 2018-06-03 20:43:33 +10:00
pasemi powerpc/pasemi: Use pr_err/pr_warn... for kernel messages 2018-08-08 00:32:31 +10:00
powermac powerpc/32: add stack protector support 2018-10-03 15:40:03 +10:00
powernv powerpc: Convert to using %pOFn instead of device_node.name 2018-10-03 15:40:01 +10:00
ps3 powerpc: remove unused to_tm() helper 2018-06-03 20:43:34 +10:00
pseries powerpc/pseries: Fix how we iterate over the DTL entries 2018-10-03 15:40:02 +10:00
fsl_uli1575.c
Kconfig powerpc/cell: Remove axonram driver 2018-01-28 17:00:36 +11:00
Kconfig.cputype powerpc/mm:book3s: Enable THP migration support 2018-10-03 15:40:00 +10:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00