gcc-plugins: arm-ssp: Prepare for THREAD_INFO_IN_TASK support
authorArd Biesheuvel <ardb@kernel.org>
Sat, 18 Sep 2021 08:44:34 +0000 (10:44 +0200)
committerArd Biesheuvel <ardb@kernel.org>
Mon, 27 Sep 2021 14:54:01 +0000 (16:54 +0200)
commitdfbdcda280eb762bae2184145cc0702932d41798
tree412a5d96995d2b0cb4d41409dd51476e3a7da8ea
parent6880fa6c56601bb8ed59df6c30fd390cc5f6dd8f
gcc-plugins: arm-ssp: Prepare for THREAD_INFO_IN_TASK support

We will be enabling THREAD_INFO_IN_TASK support for ARM, which means
that we can no longer load the stack canary value by masking the stack
pointer and taking the copy that lives in thread_info. Instead, we will
be able to load it from the task_struct directly, by using the TPIDRURO
register which will hold the current task pointer when
THREAD_INFO_IN_TASK is in effect. This is much more straight-forward,
and allows us to declutter this code a bit while at it.

Note that this means that ARMv6 (non-v6K) SMP systems can no longer use
this feature, but those are quite rare to begin with, so this is a
reasonable trade off.

Reviewed-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Tested-by: Amit Daniel Kachhap <amit.kachhap@arm.com>
arch/arm/Kconfig
arch/arm/Makefile
arch/arm/include/asm/stackprotector.h
arch/arm/include/asm/thread_info.h
arch/arm/kernel/asm-offsets.c
arch/arm/kernel/process.c
scripts/gcc-plugins/arm_ssp_per_task_plugin.c