]> git.baikalelectronics.ru Git - kernel.git/commit
s390/noexec: execute kexec datamover without DAT
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Thu, 9 Nov 2017 22:00:14 +0000 (23:00 +0100)
committerHeiko Carstens <heiko.carstens@de.ibm.com>
Fri, 10 Nov 2017 17:58:08 +0000 (18:58 +0100)
commit6ce8d02a38956949aef3d2961d76b414735decb6
treee8ada4a3ddac2d0b5e0dfd57c345c0604ee50ac0
parentb3ac27a0f455974a144e9dd8412c30150988dd0b
s390/noexec: execute kexec datamover without DAT

Rebooting into a new kernel with kexec fails (system dies) if tried on
a machine that has no-execute support. Reason for this is that the so
called datamover code gets executed with DAT on (MMU is active) and
the page that contains the datamover is marked as non-executable.
Therefore when branching into the datamover an unexpected program
check happens and afterwards the machine is dead.

This can be simply avoided by disabling DAT, which also disables any
no-execute checks, just before the datamover gets executed.

In fact the first thing done by the datamover is to disable DAT. The
code in the datamover that disables DAT can be removed as well.

Thanks to Michael Holzheu and Gerald Schaefer for tracking this down.

Reviewed-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
Reviewed-by: Philipp Rudo <prudo@linux.vnet.ibm.com>
Cc: Gerald Schaefer <gerald.schaefer@de.ibm.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Fixes: b8a684132875 ("s390: add no-execute support")
Cc: <stable@vger.kernel.org> # v4.11+
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
arch/s390/kernel/machine_kexec.c
arch/s390/kernel/relocate_kernel.S