From patchwork Tue Apr 18 14:36:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 13215778 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 42670C77B78 for ; Tue, 18 Apr 2023 14:37:11 +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=5U9J5OGg/cdhAPERFAyWdZNI+vgHkLbimtw1ddEoV/4=; b=Y2VSAj7ze6OHS+ lt09RVeO76eCPWpbrTBpuBk+wwvLbe7y0WX/ImZr0iMffDwSKu3fZo67COTY1gF5y9fbMpfz/A9Re BYHU0mrek9a3knM/0Lo26r9jKnnPrRVH3/iloTLE8jJKMG9u1dvrHvuGmtWbWuVlVKLYF4uapNOAZ t2sPgA8t+SPLEl68WpT1titugMxv/GIEwsnuYtRkPVisBhrLmNYQAEgNw8JIU3KS6h7qGrIxRIIsW qQP/Id/iVgWtM+epjxbCT0ne1vXp3w9OppxPEwZoxmq1t5FfQE3PLGjkd5XSeelK2b5sQhvs9XaOd zbKACOpNMUnNrscKXHtA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pomRV-002Sap-0g; Tue, 18 Apr 2023 14:36:25 +0000 Received: from dfw.source.kernel.org ([2604:1380:4641:c500::1]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pomRP-002SZJ-19 for linux-arm-kernel@lists.infradead.org; Tue, 18 Apr 2023 14:36:20 +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 dfw.source.kernel.org (Postfix) with ESMTPS id C91CD6357C; Tue, 18 Apr 2023 14:36:18 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E344BC4339B; Tue, 18 Apr 2023 14:36:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1681828578; bh=13pfIVbTY+IUSvjqOuFxK39Com34iHf+AM+IU+aJix4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ds0a6wHfco3xtDG7qQ4DP1lv+Jr1vqQEf8rG/sV8w0jG8Di+5DD3YpbPH46gwDxFY lDymBn8VmKeqktbX6Ur77XNcU2cDcK/nLv2ElcAaI4lAcaoiXLLAFXFZI0wK0jpEU5 2ohEon6YPEyIgA2jDltxiiYzeq1lHwKEk+JcpgittHH3XAKCVG0MRNVXJItE9yqlQg 4027aOr9rfF5pWNhoWk0MBjJpA741o/bHVwnrMVHcFRDq+Z99npT6xSgYqz2xR4r8v g899EQMGx5EN8Ny4o22c/POy1YkuCDfWWlH3gcbmNIZ5rT6NnvoCVn6BgF6Tl5kyDr 0YlU713WVKvFg== From: Ard Biesheuvel To: linux-arm-kernel@lists.infradead.org Cc: catalin.marinas@arm.com, will@kernel.org, mark.rutland@arm.com, maz@kernel.org, Ard Biesheuvel Subject: [PATCH v2 1/2] arm64: entry: Preserve/restore X29 even for compat tasks Date: Tue, 18 Apr 2023 16:36:03 +0200 Message-Id: <20230418143604.1176437-2-ardb@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230418143604.1176437-1-ardb@kernel.org> References: <20230418143604.1176437-1-ardb@kernel.org> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2114; i=ardb@kernel.org; h=from:subject; bh=13pfIVbTY+IUSvjqOuFxK39Com34iHf+AM+IU+aJix4=; b=owGbwMvMwCFmkMcZplerG8N4Wi2JIcVu1aWsCfyVL+0+/VeQuR1mrJ2SuUlALlPnkfqex7Okb Q8xe6Z1lLIwiHEwyIopsgjM/vtu5+mJUrXOs2Rh5rAygQxh4OIUgIkI/2b4Z1groHuBQ9Rs+7q/ u8OucJbdSrcQ+RDoKcX/fOb/5snSBxgZlpeJOT30kDHTzIlOYr743FG9q5jnvlyjSsLeEGORxG8 cAA== 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-20230418_073619_471172_45AAFCE8 X-CRM114-Status: GOOD ( 14.18 ) 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 Currently, the KPTI trampoline code for returning to user space takes care to only preserve X29 into FAR_EL1 for native tasks, as compat tasks don't have access to this register anyway, and so preserving it is not necessary. It also means it does not need to be restored, and so we have two code paths for returning back to user space: the native one that restores X29 from FAR_EL1, and the compat one that leaves X29 clobbered, containing the value of TTBR1_EL1, which carries a physical address pointing somewhere into the kernel image. This is needlessly complex, and given that FAR_EL1 becomes UNKNOWN after an exception return anway, the only benefit of avoiding the preserve and restore is that we can skip the system register write and read. So let's simplify this, and collapse the two code paths into one that always preserves X29 into FAR_EL1, and always restores it again after the TTBR switch. Signed-off-by: Ard Biesheuvel --- arch/arm64/kernel/entry.S | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S index ab2a6e33c0528d82..16fbd0d9790dd436 100644 --- a/arch/arm64/kernel/entry.S +++ b/arch/arm64/kernel/entry.S @@ -435,13 +435,9 @@ alternative_if_not ARM64_UNMAP_KERNEL_AT_EL0 eret alternative_else_nop_endif #ifdef CONFIG_UNMAP_KERNEL_AT_EL0 - bne 4f msr far_el1, x29 tramp_alias x30, tramp_exit_native, x29 br x30 -4: - tramp_alias x30, tramp_exit_compat, x29 - br x30 #endif .else ldr lr, [sp, #S_LR] @@ -740,9 +736,7 @@ alternative_else_nop_endif msr vbar_el1, x30 ldr lr, [sp, #S_LR] tramp_unmap_kernel x29 - .if \regsize == 64 mrs x29, far_el1 - .endif add sp, sp, #PT_REGS_SIZE // restore sp eret sb @@ -780,10 +774,6 @@ SYM_CODE_END(tramp_vectors) SYM_CODE_START(tramp_exit_native) tramp_exit SYM_CODE_END(tramp_exit_native) - -SYM_CODE_START(tramp_exit_compat) - tramp_exit 32 -SYM_CODE_END(tramp_exit_compat) .popsection // .entry.tramp.text #endif /* CONFIG_UNMAP_KERNEL_AT_EL0 */