From patchwork Fri Mar 27 10:59:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 11462187 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id EBCE41667 for ; Fri, 27 Mar 2020 10:59:42 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 5A39D20705 for ; Fri, 27 Mar 2020 10:59:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="qh/h3N6L"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="EDuJ13rS" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5A39D20705 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=72u4ZU+j5kGjp1jeTO6OBpIMb1acMYsj1kDUVxN1w10=; b=qh/h3N6L60SIpeERXy/tOOkMZQ UWdSiguqaRVPEEWJp4D7iCPX5JW9m6q+F/2zbD9tYjERyMSRFi/hBSB6ooMNUxH5vsStlo0cflnxn puHsZGZa2mbb/FMUFpeJWm39rd4fLuUNaKw4qWDnzH274dFC+AC+qvCKQOx0pAm5JBObnIqPeGxA1 kOh+JZ+UHwdyGy8Tv6jw8r4reA9eUds1gVRM8Z2bsIc0WH/56wOcJXdyXDBtlkpQAZhTITZLjo/4H +xXSR3QiaREGHm6p6R9ZtpSad2yk5wYELDncDOY4prDCFrIPjyBoO0uua+qsoVYOvOX8kG07sKK78 HPYJSdIw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jHmi9-0006dX-98; Fri, 27 Mar 2020 10:59:37 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jHmhx-0006TA-0q for linux-arm-kernel@lists.infradead.org; Fri, 27 Mar 2020 10:59:26 +0000 Received: from e123331-lin.home (amontpellier-657-1-18-247.w109-210.abo.wanadoo.fr [109.210.65.247]) (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 E9DE120714; Fri, 27 Mar 2020 10:59:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1585306764; bh=F0c5zcW/sx76sx67kUehl4mwaTCL3ffhJDE5AAIoebM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EDuJ13rSsZOPbW2NIPz9c1fa/XuVPJpca6js/Rq329CW70kUcFtfV7F7kV2NsdBXo CxSu6lNutwPrePUjCYKROtMYFLq7SO+6RXTYKKYi8P5ScZvF8lhF4g1aod8LkeGLXZ 0838GQp/6ff149lhOfaBy2rwnf7G3NjoZVu90T/0= From: Ard Biesheuvel To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 1/5] ARM: decompressor: move headroom variable out of LC0 Date: Fri, 27 Mar 2020 11:59:02 +0100 Message-Id: <20200327105906.2665-2-ardb@kernel.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200327105906.2665-1-ardb@kernel.org> References: <20200327105906.2665-1-ardb@kernel.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200327_035925_079558_C27BBA0F X-CRM114-Status: GOOD ( 10.54 ) X-Spam-Score: -5.2 (-----) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-5.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at https://www.dnswl.org/, high trust [198.145.29.99 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.0 DKIMWL_WL_HIGH DKIMwl.org - Whitelisted High sender X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-efi@vger.kernel.org, Geert Uytterhoeven , Nicolas Pitre , Linus Walleij , Russell King , Ard Biesheuvel MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org Before breaking up LC0 into different pieces, move out the variable that is already place relative (given that it subtracts 'restart' in the expression) and so its value does not need to be added to the runtime address of the LC0 symbol itself. Signed-off-by: Ard Biesheuvel Reviewed-by: Geert Uytterhoeven --- arch/arm/boot/compressed/head.S | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index 2d2a42865b39..bb674febf640 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S @@ -339,7 +339,7 @@ not_angel: */ mov r0, pc cmp r0, r4 - ldrcc r0, LC0+28 + ldrcc r0, .Lheadroom addcc r0, r0, pc cmpcc r4, r0 orrcc r4, r4, #1 @ remember we skipped cache_on @@ -716,9 +716,11 @@ LC0: .word LC0 @ r1 .word _got_start @ r11 .word _got_end @ ip .word .L_user_stack_end @ sp - .word _end - restart + 16384 + 1024*1024 .size LC0, . - LC0 +.Lheadroom: + .word _end - restart + 16384 + 1024*1024 + .Linflated_image_size_offset: .long (input_data_end - 4) - . From patchwork Fri Mar 27 10:59:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 11462189 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3E6F01392 for ; Fri, 27 Mar 2020 11:00:00 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1B790206F1 for ; Fri, 27 Mar 2020 11:00:00 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Qk/4cM6L"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="Y6hsaGV7" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1B790206F1 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=8jYS7HwZiljbq7nYqa+SEZOtLwmm9ie6uUv/g4pv1ts=; b=Qk/4cM6LMSBh+jv6+pS6Us9b2n 0hIsygwr1GvZfkjRTTucMoH2+PlvOLZ3/Dh4/7BhLJwWE6z4MyFCdAhzysXBIWTdwcobw86T0oxhy bPToWjFxjltOy8Yl5KdK+wQXvODz2UjJAcBHN8OotcwlrpZLBIHwa8FAdaUOuJuvNCsreEYP7WbNa phmZpI9OGhUEix4M+Tikb8fbEXWY/4zuAqQDnpguX/ltr/c8xfxJGV+q3zx/bcrLHWaanEci0P7or +m3WRxdL/MyPElxpunNbTIFrvTaGarhMPFjOSOJGCz0hbylBkGDrvSWloCSyizp1Lj8Yg70BmjKMu Pc2GDxcQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jHmiS-0006st-0i; Fri, 27 Mar 2020 10:59:56 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jHmhz-0006V4-1i for linux-arm-kernel@lists.infradead.org; Fri, 27 Mar 2020 10:59:28 +0000 Received: from e123331-lin.home (amontpellier-657-1-18-247.w109-210.abo.wanadoo.fr [109.210.65.247]) (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 3C79F20717; Fri, 27 Mar 2020 10:59:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1585306766; bh=GXlaIHulvMaCbD3Jl+Klq6LgV3qJqzTBno2wfve4r7k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Y6hsaGV7vAScTk0nP/lauGQpnscgywLAVJ53qCWUHqwxYQ9brF3Va15HffcRjUJOo wSFn4QnKtPKMagTBePAOIkjgkWYIKEmQRJ0FABnov/C+wR6aBLhUdc5rjQmL7kN+hj 13LLe4oyAKsYbqNFczUpZeQ0xaUmCsIrripULcVQ= From: Ard Biesheuvel To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 2/5] ARM: decompressor: split off _edata and stack base into separate object Date: Fri, 27 Mar 2020 11:59:03 +0100 Message-Id: <20200327105906.2665-3-ardb@kernel.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200327105906.2665-1-ardb@kernel.org> References: <20200327105906.2665-1-ardb@kernel.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200327_035927_122005_0E6C5496 X-CRM114-Status: GOOD ( 11.05 ) X-Spam-Score: -5.2 (-----) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-5.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at https://www.dnswl.org/, high trust [198.145.29.99 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.0 DKIMWL_WL_HIGH DKIMwl.org - Whitelisted High sender X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-efi@vger.kernel.org, Geert Uytterhoeven , Nicolas Pitre , Linus Walleij , Russell King , Ard Biesheuvel MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org In preparation of moving the handling of the LC0 object to a later stage in the decompressor startup code, move out _edata and the initial value of the stack pointer, which are now used in two places, and are needed earlier than the remaining contents of LC0. Signed-off-by: Ard Biesheuvel Reviewed-by: Geert Uytterhoeven --- arch/arm/boot/compressed/head.S | 33 +++++++++----------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index bb674febf640..a6cf2f8115e5 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S @@ -259,19 +259,16 @@ not_angel: * Find the start of physical memory. * Try the DTB first, if available. */ - adr r0, LC0 - ldr r1, [r0] @ get absolute LC0 - ldr sp, [r0, #24] @ get stack location - sub r1, r0, r1 @ compute relocation offset - add sp, sp, r1 @ apply relocation + adr r0, LC1 + ldmia r0, {r1, r6} + add sp, r1, r0 @ get stack location + add r6, r6, r0 @ get &_edata #ifdef CONFIG_ARM_APPENDED_DTB /* * Look for an appended DTB. If found, use it and * move stack away from it. */ - ldr r6, [r0, #12] @ get &_edata - add r6, r6, r1 @ relocate it ldmia r6, {r0, r5} @ get DTB signature and size #ifndef __ARMEB__ ldr r1, =0xedfe0dd0 @ sig is 0xd00dfeed big endian @@ -345,22 +342,19 @@ not_angel: orrcc r4, r4, #1 @ remember we skipped cache_on blcs cache_on -restart: adr r0, LC0 - ldmia r0, {r1, r2, r3, r6, r11, r12} - ldr sp, [r0, #24] +restart: adr r0, LC1 + ldmia r0, {r1, r6} + add sp, r1, r0 + add r6, r6, r0 - /* - * We might be running at a different address. We need - * to fix up various pointers. - */ + adr r0, LC0 + ldmia r0, {r1, r2, r3, r11, r12} sub r0, r0, r1 @ calculate the delta offset - add r6, r6, r0 @ _edata get_inflated_image_size r9, r10, lr #ifndef CONFIG_ZBOOT_ROM /* malloc space is above the relocated stack (64k max) */ - add sp, sp, r0 add r10, sp, #0x10000 #else /* @@ -712,12 +706,15 @@ not_relocated: mov r0, #0 LC0: .word LC0 @ r1 .word __bss_start @ r2 .word _end @ r3 - .word _edata @ r6 .word _got_start @ r11 .word _got_end @ ip - .word .L_user_stack_end @ sp .size LC0, . - LC0 + .type LC1, #object +LC1: .word .L_user_stack_end - LC1 @ sp + .word _edata - LC1 @ r6 + .size LC1, . - LC1 + .Lheadroom: .word _end - restart + 16384 + 1024*1024 From patchwork Fri Mar 27 10:59:04 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 11462191 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0872917EF for ; Fri, 27 Mar 2020 11:00:22 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DAAB5206F6 for ; Fri, 27 Mar 2020 11:00:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="ieYOuTV0"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="uVwIzVcx" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DAAB5206F6 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=Oy7VtZ52DcIv85Zol/iPkHxPWi4y58zqa2ggfFE6J+4=; b=ieYOuTV0LwsoXXa4FNGOobTm5R lTHiS/UaZwZ8WwhzOfNej8+caxyx+ch+M7UnWjGVhJq52V+91+Jcx/gRScLApFSHJ15Gcfdf9VMde TW0BFAFNvJ0xPH/gxaMC4shX5QuPRF80nYIbO56AYRmxGmMGfv6/0ty0Dz1PmN/FhEyykOBc16oVJ qZe74wqHxbV3my0M64TGuF0z0Ms2p/PqXeLiGKhTE63KzqMaof4JVs8v3B185wwRobwzgODoYRPFT 7QlKqYqIlg0qNXMGmkyIUY/8e5uJCIYyNtJjQoCu+A643Sinl1Qla2KI9Kn/Zq6uOy9N3acNwWt67 w3pKC7KA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jHmil-0008I6-Pc; Fri, 27 Mar 2020 11:00:15 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jHmi1-0006XO-3c for linux-arm-kernel@lists.infradead.org; Fri, 27 Mar 2020 10:59:30 +0000 Received: from e123331-lin.home (amontpellier-657-1-18-247.w109-210.abo.wanadoo.fr [109.210.65.247]) (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 0F08C2074F; Fri, 27 Mar 2020 10:59:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1585306768; bh=JkfI/Yz/aTq4fkf6UNHJYhxxoI5M+vw7HbOburdO3DU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=uVwIzVcxUN5ZA7n5X82mv+eWvPfx4GjnutX1aaKybnhCdtWVj7bfq7Ep1NxwVOeKg c00FK1h+ESwMH/b343vJxcQ9/pOVV7wazOuwRhU83Zw6NA9wBl2O3os8CgDpFpTdsw zgsXtwxoGxHLjAeoejKntj050uuxisxIKgP+egeE= From: Ard Biesheuvel To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 3/5] ARM: decompressor: defer loading of the contents of the LC0 structure Date: Fri, 27 Mar 2020 11:59:04 +0100 Message-Id: <20200327105906.2665-4-ardb@kernel.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200327105906.2665-1-ardb@kernel.org> References: <20200327105906.2665-1-ardb@kernel.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200327_035929_205255_95FF723D X-CRM114-Status: GOOD ( 12.44 ) X-Spam-Score: -5.2 (-----) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-5.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at https://www.dnswl.org/, high trust [198.145.29.99 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.0 DKIMWL_WL_HIGH DKIMwl.org - Whitelisted High sender X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-efi@vger.kernel.org, Geert Uytterhoeven , Nicolas Pitre , Linus Walleij , Russell King , Ard Biesheuvel MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org The remaining contents of LC0 are only used after the point in the decompressor startup code where we enter via 'wont_overwrite'. So move the loading of the LC0 structure after it. This will allow us to jump to wont_overwrite directly from the EFI stub, and execute the decompressor in place at the offset it was loaded by the UEFI firmware. Signed-off-by: Ard Biesheuvel Reviewed-by: Geert Uytterhoeven --- arch/arm/boot/compressed/head.S | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index a6cf2f8115e5..35d4db00eaf9 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S @@ -347,10 +347,6 @@ restart: adr r0, LC1 add sp, r1, r0 add r6, r6, r0 - adr r0, LC0 - ldmia r0, {r1, r2, r3, r11, r12} - sub r0, r0, r1 @ calculate the delta offset - get_inflated_image_size r9, r10, lr #ifndef CONFIG_ZBOOT_ROM @@ -368,9 +364,6 @@ restart: adr r0, LC1 mov r5, #0 @ init dtb size to 0 #ifdef CONFIG_ARM_APPENDED_DTB /* - * r0 = delta - * r2 = BSS start - * r3 = BSS end * r4 = final kernel address (possibly with LSB set) * r5 = appended dtb size (still unknown) * r6 = _edata @@ -378,8 +371,6 @@ restart: adr r0, LC1 * r8 = atags/device tree pointer * r9 = size of decompressed image * r10 = end of this image, including bss/stack/malloc space if non XIP - * r11 = GOT start - * r12 = GOT end * sp = stack pointer * * if there are device trees (dtb) appended to zImage, advance r10 so that the @@ -427,7 +418,6 @@ restart: adr r0, LC1 /* temporarily relocate the stack past the DTB work space */ add sp, sp, r5 - stmfd sp!, {r0-r3, ip, lr} mov r0, r8 mov r1, r6 mov r2, r5 @@ -446,7 +436,6 @@ restart: adr r0, LC1 mov r2, r5 bleq atags_to_fdt - ldmfd sp!, {r0-r3, ip, lr} sub sp, sp, r5 #endif @@ -583,6 +572,10 @@ dtb_check_done: mov pc, r0 wont_overwrite: + adr r0, LC0 + ldmia r0, {r1, r2, r3, r11, r12} + sub r0, r0, r1 @ calculate the delta offset + /* * If delta is zero, we are running at the address we were linked at. * r0 = delta From patchwork Fri Mar 27 10:59:05 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 11462193 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9EEE81392 for ; Fri, 27 Mar 2020 11:00:31 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7BB77206F1 for ; Fri, 27 Mar 2020 11:00:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="O1ctoy+a"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="n5p5aPlF" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7BB77206F1 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=/SLP+bNN6aG9TPfl2WOCwpYUU2PGBNbwjsFQUroP9FA=; b=O1ctoy+apuOfSbPws/SkSMG9e7 9h7OQeeelrNQNSwQJaQoVuq4ZrAOUVE6tHzb7vSUArnNrPzFyOdXmRw1rM3gVC49HP0ads4mIin3K beZxdEPwZWkz2cQV2fkv+0sL9S/IPCVeTltXUKPaYe1CYno6MmerWcAhV+ZrQJX/6nEy++LUxHVMU IoxiG/pNPtFyeli8WXy1ia9LwS0VAuBwwy+8fgvR457Bn/fRZQnWyEdPK1p3M8ZFlLGmqNdnTReer T605x6w3TDk/7qbAnmiJC1MNRxoKEF6qXqyuljwBjslkhcLvkSLAsVD1wRceRZzJ58gVzZ45BhUcN 0VgbQ3kA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jHmiw-0008Uj-CH; Fri, 27 Mar 2020 11:00:26 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jHmi3-0006ZW-Kg for linux-arm-kernel@lists.infradead.org; Fri, 27 Mar 2020 10:59:33 +0000 Received: from e123331-lin.home (amontpellier-657-1-18-247.w109-210.abo.wanadoo.fr [109.210.65.247]) (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 1AE692073B; Fri, 27 Mar 2020 10:59:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1585306770; bh=6oNWheLakWrFr/1PDp8ZzyS/LoXFLuI0dbimeVrZQLg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=n5p5aPlFPAeu6r57DZONexiXxPmh+dZOPd13m859D0/52ghhQfFdKKSnWXLl+xmnO +tp28j7BOl8BOjAAR7qxWp0yxKO3bsLWn12lByZFjIpHRp8h5e8M1e/B2VIFv/LtnT M8XjMydtHPBRazTrAkepr2IzKrFxwBii7cdNrAEI= From: Ard Biesheuvel To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 4/5] ARM: decompressor: move GOT into .data for EFI enabled builds Date: Fri, 27 Mar 2020 11:59:05 +0100 Message-Id: <20200327105906.2665-5-ardb@kernel.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200327105906.2665-1-ardb@kernel.org> References: <20200327105906.2665-1-ardb@kernel.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200327_035931_766938_F18D32DA X-CRM114-Status: GOOD ( 11.64 ) X-Spam-Score: -5.2 (-----) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-5.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at https://www.dnswl.org/, high trust [198.145.29.99 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.0 DKIMWL_WL_HIGH DKIMwl.org - Whitelisted High sender X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-efi@vger.kernel.org, Geert Uytterhoeven , Nicolas Pitre , Linus Walleij , Russell King , Ard Biesheuvel MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org We will be running the decompressor in place after a future patch, instead of copying it around first. This means we no longer have to disable and re-enable the MMU and caches either. However, this means we will be loaded with the restricted permissions set by the UEFI firmware, which means that we have to move the GOT table into the data section in order for the contents to be writable by the code itself. Signed-off-by: Ard Biesheuvel --- arch/arm/boot/compressed/vmlinux.lds.S | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/arm/boot/compressed/vmlinux.lds.S b/arch/arm/boot/compressed/vmlinux.lds.S index b247f399de71..d0619ec05705 100644 --- a/arch/arm/boot/compressed/vmlinux.lds.S +++ b/arch/arm/boot/compressed/vmlinux.lds.S @@ -63,9 +63,11 @@ SECTIONS _etext = .; .got.plt : { *(.got.plt) } +#ifndef CONFIG_EFI_STUB _got_start = .; .got : { *(.got) } _got_end = .; +#endif /* ensure the zImage file size is always a multiple of 64 bits */ /* (without a dummy byte, ld just ignores the empty section) */ @@ -74,6 +76,9 @@ SECTIONS #ifdef CONFIG_EFI_STUB .data : ALIGN(4096) { __pecoff_data_start = .; + _got_start = .; + *(.got) + _got_end = .; /* * The EFI stub always executes from RAM, and runs strictly before the * decompressor, so we can make an exception for its r/w data, and keep it From patchwork Fri Mar 27 10:59:06 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 11462195 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9ECFA1392 for ; Fri, 27 Mar 2020 11:00:42 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 4F7A2206F1 for ; Fri, 27 Mar 2020 11:00:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Uv8slLEm"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="nB8s87kZ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4F7A2206F1 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=ZVNaCASPqn9td9YsDhcK57tVHzt/xhPk4VXs44A+Ens=; b=Uv8slLEmObJoyXHxVwry9k6DxH sJH47gV5HaBu+JMcMobckBgjq8Lyr0fO35tX3dbYB/Uo51JUX/7+LphwfWdpuJDIP9/Q1W6kfoI7o ugzi+hgsOjpmxEw3bB9kTVTZtdhKpP7ttsr9EuFPy99BNdH5hjkk5isfz9KiwKJO88VQj8JKz6kK5 PRRj735Oy8hyBP4ajvfZYJDpRXX39E96PGzNraDCpNgdM6jSpns9YiKvJHRMtHu2f5wrL5pgj5gPh nq9t2vu8uDVKtXxzNNrUcvCY9+QpLCcH3r3DI73ENUSxsol5iEjbXD44qE6qZqmYJhKIYvwCCXdUz k5dKmFuA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jHmj8-0000HL-0A; Fri, 27 Mar 2020 11:00:38 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jHmi5-0006bV-9m for linux-arm-kernel@lists.infradead.org; Fri, 27 Mar 2020 10:59:34 +0000 Received: from e123331-lin.home (amontpellier-657-1-18-247.w109-210.abo.wanadoo.fr [109.210.65.247]) (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 335C720714; Fri, 27 Mar 2020 10:59:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1585306772; bh=wHJJRQYpjxiy7z/hgHgEbFQlvBzmOdy8fgnRugABDUU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=nB8s87kZlzc4YMU6qtLFU8fNEyvjcS3iLaQtvrThCX64dv/kcGKpUu+0vapW6fU2u v5fLaYZiw3LbYhVeppQ0uC1CZR2zEzbqctJA2i5L+LG/Nywa2DSvdo/MInia6nc78v AlyEIVMHg8t9MchjHbecqT/HW8uInuQPUqdzzq8E= From: Ard Biesheuvel To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 5/5] ARM: decompressor: run decompressor in place if loaded via UEFI Date: Fri, 27 Mar 2020 11:59:06 +0100 Message-Id: <20200327105906.2665-6-ardb@kernel.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200327105906.2665-1-ardb@kernel.org> References: <20200327105906.2665-1-ardb@kernel.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200327_035933_391529_F7905012 X-CRM114-Status: GOOD ( 18.46 ) X-Spam-Score: -5.2 (-----) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-5.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at https://www.dnswl.org/, high trust [198.145.29.99 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.0 DKIMWL_WL_HIGH DKIMwl.org - Whitelisted High sender X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-efi@vger.kernel.org, Geert Uytterhoeven , Nicolas Pitre , Linus Walleij , Russell King , Ard Biesheuvel MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org The decompressor can load from anywhere in memory, and the only reason the EFI stub code relocates it is to ensure it appears within the first 128 MiB of memory, so that the uncompressed kernel appears at the right offset in memory. We can short circuit this, and simply jump into the decompressor startup code at the point where it knows where the base of memory lives. This also means there is no need to disable the MMU and caches, create new page tables and re-enable them. Signed-off-by: Ard Biesheuvel --- arch/arm/boot/compressed/head.S | 34 ++++------------ drivers/firmware/efi/libstub/arm32-stub.c | 41 +++----------------- 2 files changed, 12 insertions(+), 63 deletions(-) diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index 35d4db00eaf9..5558b25677f0 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S @@ -1478,37 +1478,17 @@ reloc_code_end: #ifdef CONFIG_EFI_STUB ENTRY(efi_enter_kernel) - mov r7, r0 @ preserve image base - mov r4, r1 @ preserve DT pointer + mov r4, r0 @ preserve image base + mov r8, r1 @ preserve DT pointer - mov r0, r4 @ DT start - add r1, r4, r2 @ DT end + mov r0, r8 @ DT start + add r1, r8, r2 @ DT end bl cache_clean_flush - mov r0, r7 @ relocated zImage - ldr r1, =_edata @ size of zImage - add r1, r1, r0 @ end of zImage - bl cache_clean_flush - - @ The PE/COFF loader might not have cleaned the code we are - @ running beyond the PoU, and so calling cache_off below from - @ inside the PE/COFF loader allocated region is unsafe unless - @ we explicitly clean it to the PoC. - adr r0, call_cache_fn @ region of code we will - adr r1, 0f @ run with MMU off - bl cache_clean_flush - bl cache_off - - @ Set parameters for booting zImage according to boot protocol - @ put FDT address in r2, it was returned by efi_entry() - @ r1 is the machine type, and r0 needs to be 0 - mov r0, #0 - mov r1, #0xFFFFFFFF - mov r2, r4 - add r7, r7, #(__efi_start - start) - mov pc, r7 @ no mode switch + mov r5, #0 @ appended DTB size + mov r7, #0xFFFFFFFF @ machine ID + b wont_overwrite ENDPROC(efi_enter_kernel) -0: #endif .align diff --git a/drivers/firmware/efi/libstub/arm32-stub.c b/drivers/firmware/efi/libstub/arm32-stub.c index 7826553af2ba..c547dc75c276 100644 --- a/drivers/firmware/efi/libstub/arm32-stub.c +++ b/drivers/firmware/efi/libstub/arm32-stub.c @@ -199,14 +199,11 @@ efi_status_t handle_kernel_image(unsigned long *image_addr, unsigned long kernel_base; efi_status_t status; - /* - * Verify that the DRAM base address is compatible with the ARM - * boot protocol, which determines the base of DRAM by masking - * off the low 27 bits of the address at which the zImage is - * loaded. These assumptions are made by the decompressor, - * before any memory map is available. - */ - kernel_base = round_up(dram_base, SZ_128M); + /* use a 16 MiB aligned base for the decompressed kernel */ + kernel_base = round_up(dram_base, SZ_16M); + + *image_addr = kernel_base + TEXT_OFFSET; + *image_size = 0; /* * Note that some platforms (notably, the Raspberry Pi 2) put @@ -223,33 +220,5 @@ efi_status_t handle_kernel_image(unsigned long *image_addr, return status; } - /* - * Relocate the zImage, so that it appears in the lowest 128 MB - * memory window. - */ - *image_addr = (unsigned long)image->image_base; - *image_size = image->image_size; - status = efi_relocate_kernel(image_addr, *image_size, *image_size, - kernel_base + MAX_UNCOMP_KERNEL_SIZE, 0, 0); - if (status != EFI_SUCCESS) { - pr_efi_err("Failed to relocate kernel.\n"); - efi_free(*reserve_size, *reserve_addr); - *reserve_size = 0; - return status; - } - - /* - * Check to see if we were able to allocate memory low enough - * in memory. The kernel determines the base of DRAM from the - * address at which the zImage is loaded. - */ - if (*image_addr + *image_size > dram_base + ZIMAGE_OFFSET_LIMIT) { - pr_efi_err("Failed to relocate kernel, no low memory available.\n"); - efi_free(*reserve_size, *reserve_addr); - *reserve_size = 0; - efi_free(*image_size, *image_addr); - *image_size = 0; - return EFI_LOAD_ERROR; - } return EFI_SUCCESS; }