From mboxrd@z Thu Jan 1 00:00:00 1970 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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B5673C433F5 for ; Wed, 13 Oct 2021 15:26:43 +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 82ACA60F21 for ; Wed, 13 Oct 2021 15:26:43 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 82ACA60F21 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org 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=8x/PfyTm9XeuazKO5R4qQQopR3oTgNQ8Oy4TSqWIwsk=; b=1GMjM2wsqq78wE /f8DN+4fubvb/re6O4k6pWe/HDKG6cAPAey5C23KEPvopp2cxE4Ye6HQZPxjA47nFvDVIb8WjMzM0 ElyZLpmZ/bNMmUi7Yt7SkeKNcnDjm93Xw/gEpDW+O1SuocH1eG637HpLIMCuc03mXFvdPJ0m4Bkvz 3WK0s9LKD5YBva5GMPqe/0WWwfImzG1VZR3+JzSOp8KywofwGJKUuoG6aHDLpWVWEXG+1QRLF6iD3 9shzaM1RnI3eCC8SbdXCeJyQkUTPcC21JZWd4kLNdLjyFoaGqLgDbI2IGgecPabOo0+AOpg4d5qhT /JiMF6qg6oEucv16crYg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mag7I-00HL6n-1t; Wed, 13 Oct 2021 15:24:28 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mag5y-00HKhc-66 for linux-arm-kernel@lists.infradead.org; Wed, 13 Oct 2021 15:23:07 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id 6B970610E6; Wed, 13 Oct 2021 15:23:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1634138585; bh=r4Go4dh0trlbsGP6xRgj/tkJetmXK5uRKN3kIUWn2dg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GTjBqGENI9J1hRQHCMIOMOmJYdsT+WRhTQOr/eezV4u8ulOYIOQfQNdc54zZnp7vt RGCu0UFxGtG2EH/rF4WXKz7vsdhMtV0rDv+v2FfgkQdwg8cR5oCIuPIN4S1p85FoOd 78pQfL86SbSSvaIgqkxhAefzCdUDHQHy0kFopAm/A1UQ/aAjgIsfrs0wZHflZFnL3k xx6M+GFBJkNx8y91/7A//Fy/bGwXd/Rsjdcqtu3/VBGu4Hmlli9w2rZrr7wOgJtT8Y BnlcsQTPEV2srn7EcQYr+bKE/q5zm3AsCqEJIyCtB4cJBjWRXSnldgQhnTMTczslyO Wp2iJut6UjJnA== From: Ard Biesheuvel To: linux-arm-kernel@lists.infradead.org Cc: linux-hardening@vger.kernel.org, mark.rutland@arm.com, catalin.marinas@arm.com, will@kernel.org, Ard Biesheuvel Subject: [RFC PATCH 6/9] arm64: smccc: create proper stack frames for HVC/SMC calls Date: Wed, 13 Oct 2021 17:22:40 +0200 Message-Id: <20211013152243.2216899-7-ardb@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211013152243.2216899-1-ardb@kernel.org> References: <20211013152243.2216899-1-ardb@kernel.org> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2910; h=from:subject; bh=r4Go4dh0trlbsGP6xRgj/tkJetmXK5uRKN3kIUWn2dg=; b=owEB7QES/pANAwAKAcNPIjmS2Y8kAcsmYgBhZvm82mjLvzjabrwdMggjKzvG7y6a6J+P9fQHWdJX BcIaSamJAbMEAAEKAB0WIQT72WJ8QGnJQhU3VynDTyI5ktmPJAUCYWb5vAAKCRDDTyI5ktmPJMHKDA CT90uHSWGg0U2c5ChDWZ2XV9zpvTw0+gxY0K1gFpCV2fBA83/GD0eHOPhvqIvjWqhjNV0HtIDAc1OS b7OLhQBxkbC7W1gGX3xdGP81E0P6wppREmBWJHMYRvJotMYF3RO9C0MRfQP0LXCY0kXRz9rF/GBPK/ Bx0TnoKmKY95K3390uXkrbVN+y2KkT3NP1+2lS5MEOgOicav8Qd/WW3tjosDk8JTSRqFBVpRf7vlVu IB5ebHxQIl5pCn5Fm22ZI5Y3Zd59MCyr2nXSjeA51w0HcJ5MUiVcTUkzyixnsLzGH5Hxul356bhi77 miEOJ4FsfQrGvw5WPBrzTSbil7UWgN1X7FCRqZjoZcjTDj9tKyZTfj2QVQs+9zAdkeWtEe6GgRAKyU QAM2PkqII8riMZzS+8P6jeYlXu4R6/FdZagRYpFcuswtXihjrTdo56Y7L17QIx/DYb44aaBWVQKjoM EnGL9udMtc/JyYgZwpGL45FdCpc7SUymfVEiorMiNSMhI= 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-20211013_082306_291181_D9B7AC82 X-CRM114-Status: UNSURE ( 9.51 ) X-CRM114-Notice: Please train this message. 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: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Create proper stack frames using the provided macros for HVC/SMC calling helpers that use the stack. This adds the PAC return address signing when enabled, and ensures that the unwinder can deal with occurrences of these routines appearing on the call stack. Signed-off-by: Ard Biesheuvel --- arch/arm64/kernel/smccc-call.S | 40 +++++++++----------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/arch/arm64/kernel/smccc-call.S b/arch/arm64/kernel/smccc-call.S index 487381164ff6..b1864880159a 100644 --- a/arch/arm64/kernel/smccc-call.S +++ b/arch/arm64/kernel/smccc-call.S @@ -32,8 +32,7 @@ SYM_FUNC_END(__arm_smccc_sve_check) EXPORT_SYMBOL(__arm_smccc_sve_check) .macro SMCCC instr - stp x29, x30, [sp, #-16]! - mov x29, sp + frame_push 0 alternative_if ARM64_SVE bl __arm_smccc_sve_check alternative_else_nop_endif @@ -47,7 +46,7 @@ alternative_else_nop_endif cmp x9, #ARM_SMCCC_QUIRK_QCOM_A6 b.ne 1f str x6, [x4, ARM_SMCCC_QUIRK_STATE_OFFS] -1: ldp x29, x30, [sp], #16 +1: frame_pop ret .endm @@ -74,11 +73,10 @@ SYM_FUNC_END(__arm_smccc_hvc) EXPORT_SYMBOL(__arm_smccc_hvc) .macro SMCCC_1_2 instr - /* Save `res` and free a GPR that won't be clobbered */ - stp x1, x19, [sp, #-16]! + frame_push 2 - /* Ensure `args` won't be clobbered while loading regs in next step */ - mov x19, x0 + mov x19, x0 // preserve args + mov x20, x1 // preserve res /* Load the registers x0 - x17 from the struct arm_smccc_1_2_regs */ ldp x0, x1, [x19, #ARM_SMCCC_1_2_REGS_X0_OFFS] @@ -93,24 +91,20 @@ EXPORT_SYMBOL(__arm_smccc_hvc) \instr #0 - /* Load the `res` from the stack */ - ldr x19, [sp] - /* Store the registers x0 - x17 into the result structure */ - stp x0, x1, [x19, #ARM_SMCCC_1_2_REGS_X0_OFFS] - stp x2, x3, [x19, #ARM_SMCCC_1_2_REGS_X2_OFFS] - stp x4, x5, [x19, #ARM_SMCCC_1_2_REGS_X4_OFFS] - stp x6, x7, [x19, #ARM_SMCCC_1_2_REGS_X6_OFFS] - stp x8, x9, [x19, #ARM_SMCCC_1_2_REGS_X8_OFFS] - stp x10, x11, [x19, #ARM_SMCCC_1_2_REGS_X10_OFFS] - stp x12, x13, [x19, #ARM_SMCCC_1_2_REGS_X12_OFFS] - stp x14, x15, [x19, #ARM_SMCCC_1_2_REGS_X14_OFFS] - stp x16, x17, [x19, #ARM_SMCCC_1_2_REGS_X16_OFFS] - - /* Restore original x19 */ - ldp xzr, x19, [sp], #16 + stp x0, x1, [x20, #ARM_SMCCC_1_2_REGS_X0_OFFS] + stp x2, x3, [x20, #ARM_SMCCC_1_2_REGS_X2_OFFS] + stp x4, x5, [x20, #ARM_SMCCC_1_2_REGS_X4_OFFS] + stp x6, x7, [x20, #ARM_SMCCC_1_2_REGS_X6_OFFS] + stp x8, x9, [x20, #ARM_SMCCC_1_2_REGS_X8_OFFS] + stp x10, x11, [x20, #ARM_SMCCC_1_2_REGS_X10_OFFS] + stp x12, x13, [x20, #ARM_SMCCC_1_2_REGS_X12_OFFS] + stp x14, x15, [x20, #ARM_SMCCC_1_2_REGS_X14_OFFS] + stp x16, x17, [x20, #ARM_SMCCC_1_2_REGS_X16_OFFS] + + frame_pop ret -.endm + .endm /* * void arm_smccc_1_2_hvc(const struct arm_smccc_1_2_regs *args, -- 2.30.2 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel