linux/arch
Mark Rutland d3e554a867 BACKPORT: arm64: kasan: clear stale stack poison
Functions which the compiler has instrumented for KASAN place poison on
the stack shadow upon entry and remove this poison prior to returning.

In the case of cpuidle, CPUs exit the kernel a number of levels deep in
C code.  Any instrumented functions on this critical path will leave
portions of the stack shadow poisoned.

If CPUs lose context and return to the kernel via a cold path, we
restore a prior context saved in __cpu_suspend_enter are forgotten, and
we never remove the poison they placed in the stack shadow area by
functions calls between this and the actual exit of the kernel.

Thus, (depending on stackframe layout) subsequent calls to instrumented
functions may hit this stale poison, resulting in (spurious) KASAN
splats to the console.

To avoid this, clear any stale poison from the idle thread for a CPU
prior to bringing a CPU online.

Change-Id: Iac090ed3bc54cc4180f18d7e5f1540c6c755dcab
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Reviewed-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
Reviewed-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Alexander Potapenko <glider@google.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
(cherry picked from commit 0d97e6d802)
2017-11-03 18:04:44 +08:00
..
alpha Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux-linaro-stable.git 2017-11-02 17:00:07 +08:00
arc Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux-linaro-stable.git 2017-11-02 17:00:07 +08:00
arm ARM: dts: rk3288-firefly: add Wake up from sleep 2017-11-03 17:17:46 +08:00
arm64 BACKPORT: arm64: kasan: clear stale stack poison 2017-11-03 18:04:44 +08:00
avr32 LSK 17.08 v4.4-android 2017-09-01 18:56:00 +08:00
blackfin Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux-linaro-stable.git 2016-11-04 14:30:24 +08:00
c6x Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux-linaro-stable.git 2017-05-06 14:23:00 +08:00
cris Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux-linaro-stable.git 2017-03-01 18:40:28 +08:00
frv LSK 17.07 v4.4-android 2017-07-26 19:32:04 +08:00
h8300 Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux-linaro-stable.git 2017-05-06 14:23:00 +08:00
hexagon Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux-linaro-stable.git 2016-11-04 14:30:24 +08:00
ia64 LSK 17.08 v4.4-android 2017-09-01 18:56:00 +08:00
m32r Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux-linaro-stable.git 2016-11-04 14:30:24 +08:00
m68k Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux-linaro-stable.git 2017-01-10 16:07:06 +08:00
metag LSK 17.08 v4.4-android 2017-09-01 18:56:00 +08:00
microblaze Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux-linaro-stable.git 2016-11-04 14:30:24 +08:00
mips Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux-linaro-stable.git 2017-11-02 17:00:07 +08:00
mn10300 LSK 17.08 v4.4-android 2017-09-01 18:56:00 +08:00
nios2 nios2: reserve boot memory for device tree 2017-04-12 12:38:34 +02:00
openrisc LSK 17.08 v4.4-android 2017-09-01 18:56:00 +08:00
parisc Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux-linaro-stable.git 2017-11-02 17:00:07 +08:00
powerpc Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux-linaro-stable.git 2017-11-02 17:00:07 +08:00
s390 LSK 17.08 v4.4-android 2017-09-01 18:56:00 +08:00
score Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux-linaro-stable.git 2016-11-04 14:30:24 +08:00
sh LSK 17.07 v4.4-android 2017-07-26 19:32:04 +08:00
sparc LSK 17.08 v4.4-android 2017-09-01 18:56:00 +08:00
tile LSK 17.08 v4.4-android 2017-09-01 18:56:00 +08:00
um Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux-linaro-stable.git 2016-11-04 14:30:24 +08:00
unicore32
x86 Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux-linaro-stable.git 2017-11-02 17:00:07 +08:00
xtensa LSK 17.07 v4.4-android 2017-07-26 19:32:04 +08:00
.gitignore
Kconfig UPSTREAM: Clarify naming of thread info/stack allocators 2017-08-11 19:31:04 +05:30