• Philipp Rudo's avatar
    s390/purgatory: Fix crash with expoline enabled · ad03b821
    Philipp Rudo authored
    When the kernel is built with CONFIG_EXPOLINE=y and a compiler with
    indirect branch mitigation enabled the purgatory crashes. The reason for
    that is that the macros defined for expoline are used in mem.S. These
    macros define new sections (.text.__s390x_indirect_*) which are marked
    executable. Due to the missing linker script those sections are linked to
    address 0, just as the .text section. In combination with the entry point
    also being at address 0 this causes the purgatory load code
    (kernel/kexec_file.c: kexec_purgatory_setup_sechdrs) to update the entry
    point twice. Thus the old kernel jumps to some 'random' address causing the
    crash.
    
    To fix this turn off expolines for the purgatory. There is no problem with
    this in this case due to the fact that the purgatory only runs once and the
    tlb is purged (diag 308) in the end.
    
    Fixes: 840798a1 ("s390/kexec_file: Add purgatory")
    Cc: <stable@vger.kernel.org> # 4.17
    Signed-off-by: default avatarPhilipp Rudo <prudo@linux.ibm.com>
    Reviewed-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
    Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
    ad03b821
Makefile 1.24 KB