• Alexander Egorenkov's avatar
    s390/kexec: fix ipl report address for kdump · c2337a40
    Alexander Egorenkov authored
    This commit addresses the following erroneous situation with file-based
    kdump executed on a system with a valid IPL report.
    
    On s390, a kdump kernel, its initrd and IPL report if present are loaded
    into a special and reserved on boot memory region - crashkernel. When
    a system crashes and kdump was activated before, the purgatory code
    is entered first which swaps the crashkernel and [0 - crashkernel size]
    memory regions. Only after that the kdump kernel is entered. For this
    reason, the pointer to an IPL report in lowcore must point to the IPL report
    after the swap and not to the address of the IPL report that was located in
    crashkernel memory region before the swap. Failing to do so, makes the
    kdump's decompressor try to read memory from the crashkernel memory region
    which already contains the production's kernel memory.
    
    The situation described above caused spontaneous kdump failures/hangs
    on systems where the Secure IPL is activated because on such systems
    an IPL report is always present. In that case kdump's decompressor tried
    to parse an IPL report which frequently lead to illegal memory accesses
    because an IPL report contains addresses to various data.
    
    Cc: <stable@vger.kernel.org>
    Fixes: 99feaa71 ("s390/kexec_file: Create ipl report and pass to next kernel")
    Reviewed-by: default avatarVasily Gorbik <gor@linux.ibm.com>
    Signed-off-by: default avatarAlexander Egorenkov <egorenar@linux.ibm.com>
    Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
    c2337a40
machine_kexec_file.c 8.82 KB