]> git.baikalelectronics.ru Git - kernel.git/commit
s390: introduce execute-trampolines for branches
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Fri, 26 Jan 2018 11:46:47 +0000 (12:46 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 7 Feb 2018 14:57:02 +0000 (15:57 +0100)
commitbb1a952994f76f58be838c0ab3c77be7740170ec
treeb1ef7f48d102801d718baab1ae4cec2588cc5862
parentb78ae9e820db46a5307336b850bdc4f9756507b9
s390: introduce execute-trampolines for branches

Add CONFIG_EXPOLINE to enable the use of the new -mindirect-branch= and
-mfunction_return= compiler options to create a kernel fortified against
the specte v2 attack.

With CONFIG_EXPOLINE=y all indirect branches will be issued with an
execute type instruction. For z10 or newer the EXRL instruction will
be used, for older machines the EX instruction. The typical indirect
call

basr %r14,%r1

is replaced with a PC relative call to a new thunk

brasl %r14,__s390x_indirect_jump_r1

The thunk contains the EXRL/EX instruction to the indirect branch

__s390x_indirect_jump_r1:
exrl 0,0f
j .
0: br %r1

The detour via the execute type instruction has a performance impact.
To get rid of the detour the new kernel parameter "nospectre_v2" and
"spectre_v2=[on,off,auto]" can be used. If the parameter is specified
the kernel and module code will be patched at runtime.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
12 files changed:
arch/s390/Kconfig
arch/s390/Makefile
arch/s390/include/asm/lowcore.h
arch/s390/include/asm/nospec-branch.h [new file with mode: 0644]
arch/s390/kernel/Makefile
arch/s390/kernel/entry.S
arch/s390/kernel/module.c
arch/s390/kernel/nospec-branch.c [new file with mode: 0644]
arch/s390/kernel/setup.c
arch/s390/kernel/smp.c
arch/s390/kernel/vmlinux.lds.S
drivers/s390/char/Makefile