• H
    s390/noexec: execute kexec datamover without DAT · d0e810ee
    Heiko Carstens 提交于
    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: NMichael Holzheu <holzheu@linux.vnet.ibm.com>
    Reviewed-by: NPhilipp Rudo <prudo@linux.vnet.ibm.com>
    Cc: Gerald Schaefer <gerald.schaefer@de.ibm.com>
    Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Fixes: 57d7f939 ("s390: add no-execute support")
    Cc: <stable@vger.kernel.org> # v4.11+
    Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
    d0e810ee
relocate_kernel.S 3.0 KB