# git rev-parse -q --verify c64316502008064c158fa40cc250665e461b0f2a^{commit} c64316502008064c158fa40cc250665e461b0f2a already have revision, skipping fetch # git checkout -q -f -B kisskb c64316502008064c158fa40cc250665e461b0f2a # git clean -qxdf # < git log -1 # commit c64316502008064c158fa40cc250665e461b0f2a # Author: Ard Biesheuvel # Date: Sat Feb 16 14:51:26 2019 +0100 # # crypto: sha512/arm - fix crash bug in Thumb2 build # # The SHA512 code we adopted from the OpenSSL project uses a rather # peculiar way to take the address of the round constant table: it # takes the address of the sha256_block_data_order() routine, and # substracts a constant known quantity to arrive at the base of the # table, which is emitted by the same assembler code right before # the routine's entry point. # # However, recent versions of binutils have helpfully changed the # behavior of references emitted via an ADR instruction when running # in Thumb2 mode: it now takes the Thumb execution mode bit into # account, which is bit 0 af the address. This means the produced # table address also has bit 0 set, and so we end up with an address # value pointing 1 byte past the start of the table, which results # in crashes such as # # Unable to handle kernel paging request at virtual address bf825000 # pgd = 42f44b11 # [bf825000] *pgd=80000040206003, *pmd=5f1bd003, *pte=00000000 # Internal error: Oops: 207 [#1] PREEMPT SMP THUMB2 # Modules linked in: sha256_arm(+) sha1_arm_ce sha1_arm ... # CPU: 7 PID: 396 Comm: cryptomgr_test Not tainted 5.0.0-rc6+ #144 # Hardware name: QEMU KVM Virtual Machine, BIOS 0.0.0 02/06/2015 # PC is at sha256_block_data_order+0xaaa/0xb30 [sha256_arm] # LR is at __this_module+0x17fd/0xffffe800 [sha256_arm] # pc : [] lr : [] psr: 800b0033 # sp : ebc8bbe8 ip : faaabe1c fp : 2fdd3433 # r10: 4c5f1692 r9 : e43037df r8 : b04b0a5a # r7 : c369d722 r6 : 39c3693e r5 : 7a013189 r4 : 1580d26b # r3 : 8762a9b0 r2 : eea9c2cd r1 : 3e9ab536 r0 : 1dea4ae7 # Flags: Nzcv IRQs on FIQs on Mode SVC_32 ISA Thumb Segment user # Control: 70c5383d Table: 6b8467c0 DAC: dbadc0de # Process cryptomgr_test (pid: 396, stack limit = 0x69e1fe23) # Stack: (0xebc8bbe8 to 0xebc8c000) # ... # unwind: Unknown symbol address bf820bca # unwind: Index not found bf820bca # Code: 441a ea80 40f9 440a (f85e) 3b04 # ---[ end trace e560cce92700ef8a ]--- # # Given that this affects older kernels as well, in case they are built # with a recent toolchain, apply a minimal backportable fix, which is # to emit another non-code label at the start of the routine, and # reference that instead. (This is similar to the current upstream state # of this file in OpenSSL) # # Signed-off-by: Ard Biesheuvel # Signed-off-by: Herbert Xu # < /opt/cross/kisskb/gcc-4.6.3-nolibc/powerpc-linux/bin/powerpc-linux-gcc --version # < /opt/cross/kisskb/gcc-4.6.3-nolibc/powerpc-linux/bin/powerpc-linux-ld --version # < git log --format=%s --max-count=1 c64316502008064c158fa40cc250665e461b0f2a # < make -s -j 8 ARCH=powerpc O=/kisskb/build/crypto_pseries_defconfig+POWERNV=n_powerpc-gcc4.6 CROSS_COMPILE=/opt/cross/kisskb/gcc-4.6.3-nolibc/powerpc-linux/bin/powerpc-linux- pseries_defconfig # Added to kconfig CONFIG_PPC_POWERNV=n # yes \n | make -s -j 8 ARCH=powerpc O=/kisskb/build/crypto_pseries_defconfig+POWERNV=n_powerpc-gcc4.6 CROSS_COMPILE=/opt/cross/kisskb/gcc-4.6.3-nolibc/powerpc-linux/bin/powerpc-linux- oldconfig yes: standard output: Broken pipe # make -s -j 8 ARCH=powerpc O=/kisskb/build/crypto_pseries_defconfig+POWERNV=n_powerpc-gcc4.6 CROSS_COMPILE=/opt/cross/kisskb/gcc-4.6.3-nolibc/powerpc-linux/bin/powerpc-linux- /kisskb/src/kernel/cgroup/cgroup-v1.c: In function 'cgroup1_mount': /kisskb/src/kernel/cgroup/cgroup-v1.c:1263:20: warning: 'root' may be used uninitialized in this function [-Wuninitialized] /kisskb/src/mm/hugetlb.c: In function 'alloc_pool_huge_page': /kisskb/src/mm/hugetlb.c:1434:5: warning: 'page' may be used uninitialized in this function [-Wuninitialized] /kisskb/src/kernel/printk/printk.c: In function 'devkmsg_sysctl_set_loglvl': /kisskb/src/kernel/printk/printk.c:186:16: warning: 'old' may be used uninitialized in this function [-Wuninitialized] /kisskb/src/drivers/base/regmap/regmap.c: In function 'regmap_raw_read': /kisskb/src/drivers/base/regmap/regmap.c:2594:6: warning: 'ret' may be used uninitialized in this function [-Wuninitialized] /kisskb/src/drivers/base/regmap/regmap.c: In function '_regmap_raw_write': /kisskb/src/drivers/base/regmap/regmap.c:1855:6: warning: 'ret' may be used uninitialized in this function [-Wuninitialized] /kisskb/src/kernel/trace/trace_dynevent.c: In function 'create_dyn_event': /kisskb/src/kernel/trace/trace_dynevent.c:89:5: warning: 'ret' may be used uninitialized in this function [-Wuninitialized] /kisskb/src/net/bridge/br_netlink.c: In function 'br_afspec.isra.28': /kisskb/src/net/bridge/br_netlink.c:652:7: warning: 'err' may be used uninitialized in this function [-Wuninitialized] /kisskb/src/drivers/i2c/i2c-core-base.c: In function 'i2c_generic_scl_recovery': /kisskb/src/drivers/i2c/i2c-core-base.c:235:5: warning: 'ret' may be used uninitialized in this function [-Wuninitialized] /kisskb/src/fs/nfsd/nfs4xdr.c: In function 'nfsd4_encode_components_esc': /kisskb/src/fs/nfsd/nfs4xdr.c:2076:9: warning: 'str' may be used uninitialized in this function [-Wuninitialized] /kisskb/src/fs/proc/inode.c: In function 'proc_reg_open': /kisskb/src/include/linux/list.h:65:12: warning: 'pdeo' may be used uninitialized in this function [-Wuninitialized] /kisskb/src/fs/proc/inode.c:339:21: note: 'pdeo' was declared here /kisskb/src/fs/udf/unicode.c: In function 'udf_name_conv_char': /kisskb/src/fs/udf/unicode.c:132:8: warning: 'c' may be used uninitialized in this function [-Wuninitialized] /kisskb/src/drivers/tty/serial/8250/8250_core.c: In function 'univ8250_release_irq': /kisskb/src/drivers/tty/serial/8250/8250_core.c:247:18: warning: 'i' may be used uninitialized in this function [-Wuninitialized] /kisskb/src/drivers/tty/serial/8250/8250_core.c:227:19: note: 'i' was declared here /kisskb/src/drivers/net/tun.c: In function 'tun_get_user': /kisskb/src/drivers/net/tun.c:1843:30: warning: 'copylen' may be used uninitialized in this function [-Wuninitialized] /kisskb/src/drivers/net/tun.c:1753:46: warning: 'linear' may be used uninitialized in this function [-Wuninitialized] arch/powerpc/platforms/pseries/pci.o: In function `.pSeries_final_fixup': (.init.text+0x1a8): undefined reference to `.pnv_npu2_init' make[1]: *** [/kisskb/src/Makefile:1020: vmlinux] Error 1 make: *** [Makefile:152: sub-make] Error 2 Command 'make -s -j 8 ARCH=powerpc O=/kisskb/build/crypto_pseries_defconfig+POWERNV=n_powerpc-gcc4.6 CROSS_COMPILE=/opt/cross/kisskb/gcc-4.6.3-nolibc/powerpc-linux/bin/powerpc-linux- ' returned non-zero exit status 2 # rm -rf /kisskb/build/crypto_pseries_defconfig+POWERNV=n_powerpc-gcc4.6 # Build took: 0:03:05.331372