# git rev-parse -q --verify c14cbef0319d21339a76247c3061230ae2950a7c^{commit} c14cbef0319d21339a76247c3061230ae2950a7c already have revision, skipping fetch # git checkout -q -f -B kisskb c14cbef0319d21339a76247c3061230ae2950a7c # git clean -qxdf # < git log -1 # commit c14cbef0319d21339a76247c3061230ae2950a7c # Author: Christophe Leroy # Date: Mon Jun 3 08:20:28 2019 +0000 # # powerpc: fix kexec failure on book3s/32 # # In the old days, _PAGE_EXEC didn't exist on 6xx aka book3s/32. # Therefore, allthough __mapin_ram_chunk() was already mapping kernel # text with PAGE_KERNEL_TEXT and the rest with PAGE_KERNEL, the entire # memory was executable. Part of the memory (first 512kbytes) was # mapped with BATs instead of page table, but it was also entirely # mapped as executable. # # In commit 385e89d5b20f ("powerpc/mm: add exec protection on # powerpc 603"), we started adding exec protection to some 6xx, namely # the 603, for pages mapped via pagetables. # # Then, in commit 63b2bc619565 ("powerpc/mm/32s: Use BATs for # STRICT_KERNEL_RWX"), the exec protection was extended to BAT mapped # memory, so that really only the kernel text could be executed. # # The problem here is that kexec is based on copying some code into # upper part of memory then executing it from there in order to install # a fresh new kernel at its definitive location. # # However, the code is position independant and first part of it is # just there to deactivate the MMU and jump to the second part. So it # is possible to run this first part inplace instead of running the # copy. Once the MMU is off, there is no protection anymore and the # second part of the code will just run as before. # # Reported-by: Aaro Koskinen # Fixes: 63b2bc619565 ("powerpc/mm/32s: Use BATs for STRICT_KERNEL_RWX") # Cc: stable@vger.kernel.org # Signed-off-by: Christophe Leroy # Tested-by: Aaro Koskinen # Signed-off-by: Michael Ellerman # < /opt/cross/kisskb/korg/gcc-8.1.0-nolibc/s390-linux/bin/s390-linux-gcc --version # < /opt/cross/kisskb/korg/gcc-8.1.0-nolibc/s390-linux/bin/s390-linux-ld --version # < git log --format=%s --max-count=1 c14cbef0319d21339a76247c3061230ae2950a7c # < make -s -j 24 ARCH=s390 O=/kisskb/build/powerpc-fixes_s390-defconfig_s390x-gcc8 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.1.0-nolibc/s390-linux/bin/s390-linux- defconfig # make -s -j 24 ARCH=s390 O=/kisskb/build/powerpc-fixes_s390-defconfig_s390x-gcc8 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.1.0-nolibc/s390-linux/bin/s390-linux- arch/s390/../../virt/kvm/kvm_main.o: In function `kvm_vcpu_unmap': /kisskb/src/arch/s390/kvm/../../../virt/kvm/kvm_main.c:1799: undefined reference to `memunmap' make[1]: *** [/kisskb/src/Makefile:1052: vmlinux] Error 1 make: *** [Makefile:179: sub-make] Error 2 Command 'make -s -j 24 ARCH=s390 O=/kisskb/build/powerpc-fixes_s390-defconfig_s390x-gcc8 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.1.0-nolibc/s390-linux/bin/s390-linux- ' returned non-zero exit status 2 # rm -rf /kisskb/build/powerpc-fixes_s390-defconfig_s390x-gcc8 # Build took: 0:02:12.742359