Received: by 2002:a25:5b86:0:0:0:0:0 with SMTP id p128csp2083479ybb; Fri, 29 Mar 2019 18:37:25 -0700 (PDT) X-Google-Smtp-Source: APXvYqzoCvv++S1R5DiwJCVN7J9n4NSM/swlCtzR82dv/Q5HO34HiJd5BAPr5NETbNPuozqcmwaV X-Received: by 2002:aa7:8719:: with SMTP id b25mr50389177pfo.90.1553909845407; Fri, 29 Mar 2019 18:37:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553909845; cv=none; d=google.com; s=arc-20160816; b=CN85qX8HcUFbgp3PSkiSFvgWP1ZHJgLB4ZASeT6EyfPBaHHzGjK+35ytvHee/At1jh KDFs/77CooQ/nHJ2aZG6rwJcORJZ0g2aNVf9xAauUBheoNj8/5sN5DBCIzIPKfA3wzW3 8hvy5Egkps/7oZbKbq9FDRA67Gsxw6oaN0448o8w+v7elXcGvNIPiPS0g03i0KKY9IIY X/ry1zyNRY0lO51HAyS3GAS2Qx5Vrl2XzWgAvC+NQ7TddFYrNxYLD4Ws1mJbEZVOW30C j5CUt1HagPe2KNDOFsUt6PXnKtXENW7bra6vpK1S4nRrB4FD4akRmjJGP0xq7Jk8c/sb 9Q7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=PtKw7g4Po3RNgLpvCWSZZ/zUD3HVkXNyHj4iz60t288=; b=gdwXwoDB2bGVsQX6Bvq7lS+28Uu7ejVBtUpx368m4eiuXHNzVuirJ4OGnct9kxaRmy i32cob1XLCdmYDfn69jL9Rqz/OhmpNAORwl2uzMAGT6Ax1qYGzG0l/hVSl6BM6MS28a0 NUjgvDTyuaQK49f+iFBAgrDzgITH56d7ItYnhKst2kysJ2Xor4Dd5YazJ+Dgnpf1/9lA 7hb5m6T+XXNDWW3TcOk5tKw9J+xUnYEpHs5WLROgNliLaf82erMj0kpTqmxXKFP+wfP9 N4AqickHs94J9fpT02EqpvgTlnToMspHvZWEUGAmLw3XhE/DREqf+3Z8GJE5qU4C2xBe 7G/A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=dO4wq1dR; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i1si3222575pgb.322.2019.03.29.18.37.10; Fri, 29 Mar 2019 18:37:25 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=dO4wq1dR; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731874AbfC3BbG (ORCPT + 99 others); Fri, 29 Mar 2019 21:31:06 -0400 Received: from mail.kernel.org ([198.145.29.99]:38426 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731817AbfC3BbE (ORCPT ); Fri, 29 Mar 2019 21:31:04 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 81C1021773; Sat, 30 Mar 2019 01:31:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1553909463; bh=efKN0Vzo9gYs9cCpyrkLiDVIqUCSbzOJtCN5jhDP3Y8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dO4wq1dRHYwqoanriPLJ0NQdnyxkHJd0wWwjaWk2dOUdYyd+re7zI4oTge/F+MBT5 9ZI14H+5E2OIg2r+WRZQl8Zdgm/KfjxrxVwNJTcxbXYYQyE+vcYeXmZuJHgraev241 riAnMKRaBIHjYQer0Vo/fEI7YIrD/0O3h7Eae/cs= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Ard Biesheuvel , Herbert Xu , Sasha Levin , linux-crypto@vger.kernel.org Subject: [PATCH AUTOSEL 4.14 21/37] crypto: sha512/arm - fix crash bug in Thumb2 build Date: Fri, 29 Mar 2019 21:30:04 -0400 Message-Id: <20190330013020.379-21-sashal@kernel.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190330013020.379-1-sashal@kernel.org> References: <20190330013020.379-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Ard Biesheuvel [ Upstream commit c64316502008064c158fa40cc250665e461b0f2a ] 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 Signed-off-by: Sasha Levin --- arch/arm/crypto/sha512-armv4.pl | 3 ++- arch/arm/crypto/sha512-core.S_shipped | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/arch/arm/crypto/sha512-armv4.pl b/arch/arm/crypto/sha512-armv4.pl index a2b11a844357..5fe336420bcf 100644 --- a/arch/arm/crypto/sha512-armv4.pl +++ b/arch/arm/crypto/sha512-armv4.pl @@ -267,10 +267,11 @@ WORD64(0x5fcb6fab,0x3ad6faec, 0x6c44198c,0x4a475817) .global sha512_block_data_order .type sha512_block_data_order,%function sha512_block_data_order: +.Lsha512_block_data_order: #if __ARM_ARCH__<7 sub r3,pc,#8 @ sha512_block_data_order #else - adr r3,sha512_block_data_order + adr r3,.Lsha512_block_data_order #endif #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) ldr r12,.LOPENSSL_armcap diff --git a/arch/arm/crypto/sha512-core.S_shipped b/arch/arm/crypto/sha512-core.S_shipped index 3694c4d4ca2b..de9bd7f55242 100644 --- a/arch/arm/crypto/sha512-core.S_shipped +++ b/arch/arm/crypto/sha512-core.S_shipped @@ -134,10 +134,11 @@ WORD64(0x5fcb6fab,0x3ad6faec, 0x6c44198c,0x4a475817) .global sha512_block_data_order .type sha512_block_data_order,%function sha512_block_data_order: +.Lsha512_block_data_order: #if __ARM_ARCH__<7 sub r3,pc,#8 @ sha512_block_data_order #else - adr r3,sha512_block_data_order + adr r3,.Lsha512_block_data_order #endif #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) ldr r12,.LOPENSSL_armcap -- 2.19.1