From patchwork Tue Nov 8 18:21:59 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 13036686 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 81939C433FE for ; Tue, 8 Nov 2022 18:23:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=9+UqX2A/OZnikSZAmfE8HQ6Rr+rpGLiWRbxLH7qJB0k=; b=OTkx9m2qfrX2yN 8uh5GTk7gkG11rmeC5yiTsGRUgJnR6TYVxvZXPKQ7FMkfISr66HjtegNc0wBIeWOfaUBXFNP1ADDv hHiHy0zw9MuqixRuwctHDyhkZTw7jgD+rG6qxnZ5Tvo89ZtZUGfhTHl7dNzfvxarcEmVGlhBp3UN3 dXVDjTjM9LSiXfQzRKctwqwJfGl2h7g37bQ13p+wvhdlNtIGwJbVKJhf4nL09eIusDl03kyprJaaN miu7Z8huFdoUw2v+3ppTe1//FeXuFaDDEq0j2RT07O36c+hkl+IBIa4ZAdIFgwIvE8UwFnVDQHCUy qldIpRZWRAwFqFqJD2Qw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1osTFO-007Rh1-Ib; Tue, 08 Nov 2022 18:22:54 +0000 Received: from ams.source.kernel.org ([2604:1380:4601:e00::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1osTF0-007RZX-Fu for linux-arm-kernel@lists.infradead.org; Tue, 08 Nov 2022 18:22:32 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 2B47AB81BF6; Tue, 8 Nov 2022 18:22:29 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 20910C433C1; Tue, 8 Nov 2022 18:22:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1667931747; bh=BEcl9lZv2MCbvNBgvkLCzZ96Z78+ncsINGTKsTvpgMw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KB4gM8NmX7zJG9+E6V2OzY1MeUN4qetsIfYhpSv/miKS2VbyFjT2HFPWZV9Kq5xB7 c1IJyG1wCNAMAdLHlo2QZSG7SH1r0KXj7hATHHxrfSknI43n0IlMn6yY/UIhCa2B5i LVN+8cO77s4ayqmkgajXRLJH7rWbRIYqxVyqiS/r5rG5BUYs9l8qxpiloC43HjRsQG fkc3oPL7eOMptKwui0a4lM8L66bWWw6VkEVeLuLLclll3O7verejEZE3m46g47WveV AKlODUyDbEvDQr9uYfF65NCLNKOdmRRooQUlQT2EtYefkm03OhSmmTBweqzYIk4SfW Dh57DC8BdIRCQ== From: Ard Biesheuvel To: linux-arm-kernel@lists.infradead.org Cc: linux-efi@vger.kernel.org, keescook@chromium.org, Ard Biesheuvel , Will Deacon , Catalin Marinas , Marc Zyngier , Mark Rutland Subject: [PATCH v5 2/7] arm64: kernel: move identity map out of .text mapping Date: Tue, 8 Nov 2022 19:21:59 +0100 Message-Id: <20221108182204.2447664-3-ardb@kernel.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20221108182204.2447664-1-ardb@kernel.org> References: <20221108182204.2447664-1-ardb@kernel.org> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=3476; i=ardb@kernel.org; h=from:subject; bh=BEcl9lZv2MCbvNBgvkLCzZ96Z78+ncsINGTKsTvpgMw=; b=owEB7QES/pANAwAKAcNPIjmS2Y8kAcsmYgBjap5Dd8EYeR6GPhjFwyg/KNACzmWEOF5bzxZkzYKz aUnOLPqJAbMEAAEKAB0WIQT72WJ8QGnJQhU3VynDTyI5ktmPJAUCY2qeQwAKCRDDTyI5ktmPJB3BC/ 4wRy6sI/iHMYRj/AUBA3eRP5xko6VseCTtEEqLbvGEXOwv1cnYH3S7+dhT+qSz1+nC46AJ5/2JzVKo Ii4fkOxAS+NGPu/BFpiBx3Jb479p5SEtp5Llbuud17a+pFRDbQ6l7LcY5O/o77/zePMHy5afwnruH/ ONdpVcvRY4DC2tckEGiWnYs5JmPN7v/GlfM2md36PAZMJJZ07cvDcpIa/AJSvoUZP+pLs5D3tlfwg2 OnygY8zWRGLUX3CD4odNiQ8RyCC2ulfDj5VyHa0r5e6W41WknLi6ngTtlVFNpsZ9FxOIjJQwpWkxIS V00So6bYMWfwPR4iVxlDcqV8/tJ5pHRbCXE3INdKZp4ntBWtMoVkxI0cmeF2xRh7Io9s9KOxs2aA19 LIlkGNOZt4eP9cd44UzkutkSu8yBrJgz6YbWNmpgVD0qLxGQtHBApFXO2bEE029+fbR86/5+Ozw2O7 De/x1rjw8TXpF0JzU9cZEIUo+H+rPUbSt2Ol6lkvUQzKk= X-Developer-Key: i=ardb@kernel.org; a=openpgp; fpr=F43D03328115A198C90016883D200E9CA6329909 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20221108_102230_837237_0BCECB68 X-CRM114-Status: GOOD ( 14.72 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Reorganize the ID map slightly so that only code that is executed with the MMU off or via the 1:1 mapping remains. This allows us to move the identity map out of the .text segment, as it will no longer need executable permissions via the kernel mapping. Signed-off-by: Ard Biesheuvel --- arch/arm64/kernel/head.S | 28 +++++++++++--------- arch/arm64/kernel/vmlinux.lds.S | 2 +- arch/arm64/mm/proc.S | 2 -- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S index c59e0d95b44d0901..272877c5b4fa1203 100644 --- a/arch/arm64/kernel/head.S +++ b/arch/arm64/kernel/head.S @@ -540,19 +540,6 @@ SYM_INNER_LABEL(init_el2, SYM_L_LOCAL) eret SYM_FUNC_END(init_kernel_el) -/* - * Sets the __boot_cpu_mode flag depending on the CPU boot mode passed - * in w0. See arch/arm64/include/asm/virt.h for more info. - */ -SYM_FUNC_START_LOCAL(set_cpu_boot_mode_flag) - adr_l x1, __boot_cpu_mode - cmp w0, #BOOT_CPU_MODE_EL2 - b.ne 1f - add x1, x1, #4 -1: str w0, [x1] // Save CPU boot mode - ret -SYM_FUNC_END(set_cpu_boot_mode_flag) - /* * This provides a "holding pen" for platforms to hold all secondary * cores are held until we're ready for them to initialise. @@ -596,6 +583,7 @@ SYM_FUNC_START_LOCAL(secondary_startup) br x8 SYM_FUNC_END(secondary_startup) + .text SYM_FUNC_START_LOCAL(__secondary_switched) mov x0, x20 bl set_cpu_boot_mode_flag @@ -628,6 +616,19 @@ SYM_FUNC_START_LOCAL(__secondary_too_slow) b __secondary_too_slow SYM_FUNC_END(__secondary_too_slow) +/* + * Sets the __boot_cpu_mode flag depending on the CPU boot mode passed + * in w0. See arch/arm64/include/asm/virt.h for more info. + */ +SYM_FUNC_START_LOCAL(set_cpu_boot_mode_flag) + adr_l x1, __boot_cpu_mode + cmp w0, #BOOT_CPU_MODE_EL2 + b.ne 1f + add x1, x1, #4 +1: str w0, [x1] // Save CPU boot mode + ret +SYM_FUNC_END(set_cpu_boot_mode_flag) + /* * The booting CPU updates the failed status @__early_cpu_boot_status, * with MMU turned off. @@ -659,6 +660,7 @@ SYM_FUNC_END(__secondary_too_slow) * Checks if the selected granule size is supported by the CPU. * If it isn't, park the CPU */ + .section ".idmap.text","awx" SYM_FUNC_START(__enable_mmu) mrs x3, ID_AA64MMFR0_EL1 ubfx x3, x3, #ID_AA64MMFR0_EL1_TGRAN_SHIFT, 4 diff --git a/arch/arm64/kernel/vmlinux.lds.S b/arch/arm64/kernel/vmlinux.lds.S index 45131e354e27f1f8..c7727a1740ce11f5 100644 --- a/arch/arm64/kernel/vmlinux.lds.S +++ b/arch/arm64/kernel/vmlinux.lds.S @@ -168,7 +168,6 @@ SECTIONS LOCK_TEXT KPROBES_TEXT HYPERVISOR_TEXT - IDMAP_TEXT *(.gnu.warning) . = ALIGN(16); *(.got) /* Global offset table */ @@ -195,6 +194,7 @@ SECTIONS TRAMP_TEXT HIBERNATE_TEXT KEXEC_TEXT + IDMAP_TEXT . = ALIGN(PAGE_SIZE); } diff --git a/arch/arm64/mm/proc.S b/arch/arm64/mm/proc.S index b9ecbbae1e1abca1..d7ca6f23fb0d1334 100644 --- a/arch/arm64/mm/proc.S +++ b/arch/arm64/mm/proc.S @@ -110,7 +110,6 @@ SYM_FUNC_END(cpu_do_suspend) * * x0: Address of context pointer */ - .pushsection ".idmap.text", "awx" SYM_FUNC_START(cpu_do_resume) ldp x2, x3, [x0] ldp x4, x5, [x0, #16] @@ -166,7 +165,6 @@ alternative_else_nop_endif isb ret SYM_FUNC_END(cpu_do_resume) - .popsection #endif .pushsection ".idmap.text", "awx"