From patchwork Mon Jun 10 06:32:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Pierre-Cl=C3=A9ment_Tosi?= X-Patchwork-Id: 13691558 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 04195C27C5E for ; Mon, 10 Jun 2024 06:33:26 +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:Cc:To:From:Subject:Message-ID: References:Mime-Version:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=IvRiQBuvHagXoIv1NxZ9lmVoRzBKHqEHbdCFpmHHIg4=; b=g48End6pZ9qweKT3gt7AJeuD1l 5uF5Be4VEUuDvLsbnEfPcLANL91Q7nW3LQAqFRY9ZsYbPnEQtjbMGoX1CnQ6UVE5qhRKadgwYZZ1j tdBsky6Y1Eu77Yl4meCb5/mcni9J6YFyRG3G71IGsmPflnTd9Z4egTYkYUgPP4Hgafzb6+IDLlvb9 DQUOlkdppMQB45tby91yWJ39BWPjIvo3M4EIEj8IeGL7dcGqtB1DOuNJHGZ++7vOtxmyB0g+yxF4h scQ+NybOidW8U2+HlknkW6wutPsa4IVLEVdydDkoyLsX39X/7sfhZvnZ5k//jn8dKy1eRT6Bp+OGW /0Lj/HqQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sGYag-00000003zE1-3jSJ; Mon, 10 Jun 2024 06:33:14 +0000 Received: from mail-ed1-x54a.google.com ([2a00:1450:4864:20::54a]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sGYaZ-00000003zAf-3n0D for linux-arm-kernel@lists.infradead.org; Mon, 10 Jun 2024 06:33:09 +0000 Received: by mail-ed1-x54a.google.com with SMTP id 4fb4d7f45d1cf-57c8bb27675so154492a12.3 for ; Sun, 09 Jun 2024 23:33:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1718001183; x=1718605983; darn=lists.infradead.org; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:from:to:cc:subject:date:message-id :reply-to; bh=8wJ+K/s8pldv3mPcUFi7Dy0d1N3gzIgovkmOrPee3kY=; b=A707ou4OIpyxiXsXyyAxVTQzpFvDlTVKRuZxSfgYZCwTg827Mw5uPyIzGKXRuPG0mM MqjzXVGOR/rVZ7K47ognEbFJUMqEOTENGyVOs8zGbRtCsDz3lrStOfDbzIurjDBfXHNf UYnhVnXDLRu9HBDet9+7kcVL/0E2lIcELxxJBdLLaoHCNT2M/tvx/qBn7LARj1W8BHHp MQ6Dh/9r6ojGWvdgwq4Bc9FSSiN35+CN8my75cFK7QEVn8+Z13BiHwlGssJoOV/LCAS0 xqVgnKZ5nh8V7C3NtrXQokCBVM8xj1GOpmseas+BvCI+RkNBKG7S881GqJMs6qN3iw3K Sv3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718001183; x=1718605983; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=8wJ+K/s8pldv3mPcUFi7Dy0d1N3gzIgovkmOrPee3kY=; b=BGXeiqNeNpVbFprpPvsuY2Umy0BCZFCdySHVm7jIBm2VRwNksvGqSq4NRbk64g/BOa pouuU+1VsuYw+6Jm/ZoNamkYW39CKHXRVly2eHSwnJstIfE4KcIXQUqv5YUEcIT9Tlzx kEecZ+xlplSFjWs6/4oyABbCu8bzbQqsdoRzCB5RcgNByCl6vyLhhogayqXYxFyM1aUN 2Qf9G6CYuhRnK+WfIUKIJAE3hFcH8Voo+Niz8d6+8i09l1VT1QmMMil6PtnxseeMUcMx eDOQVoCDMZrksDJG/L5ZrI5k6uxxmEpZVZf5jBbp9Q7wJxAHmpBwIav6t6v/FHbfbNJk 65rA== X-Forwarded-Encrypted: i=1; AJvYcCU2hONEY1gsNe6XULLPBetqCCTInPG5Ass/3YXyhCtpBclF2MgdgDGQ6joLW0kFBBzCeAaINRJgdaXxxuh7hTPzJe4GvdSoXotts/IdbuNslnmkYBk= X-Gm-Message-State: AOJu0YyorY5rt45xd/WmydVDkBNui2sYybvVzI9G15hMhaVoyuElS2+F WS7G/qQ/eOEJDQbxd4I20ZSwIayvCbSB/U6V/dZpeOVjcU77Fo+yEB/7vdnzopGSzWBCvzTIuA= = X-Google-Smtp-Source: AGHT+IEt+XJnlwohw8pCOFCo0DTh/XkUfS0YwTVHFYUDIMIHKXdAj4Km447qJlXZ8VPvMtPu9o1Olk8caQ== X-Received: from ptosi.c.googlers.com ([fda3:e722:ac3:cc00:31:98fb:c0a8:11ec]) (user=ptosi job=sendgmr) by 2002:a05:6402:370b:b0:57c:7f32:3107 with SMTP id 4fb4d7f45d1cf-57c7f32323amr3722a12.1.1718001183379; Sun, 09 Jun 2024 23:33:03 -0700 (PDT) Date: Mon, 10 Jun 2024 07:32:30 +0100 In-Reply-To: <20240610063244.2828978-1-ptosi@google.com> Mime-Version: 1.0 References: <20240610063244.2828978-1-ptosi@google.com> X-Mailer: git-send-email 2.45.2.505.gda0bf45e8d-goog Message-ID: <20240610063244.2828978-2-ptosi@google.com> Subject: [PATCH v5 1/8] KVM: arm64: Fix clobbered ELR in sync abort/SError From: " =?utf-8?q?Pierre-Cl=C3=A9ment_Tosi?= " To: kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org Cc: " =?utf-8?q?Pierre-Cl=C3=A9ment_Tosi?= " , Will Deacon , Marc Zyngier , Oliver Upton , Suzuki K Poulose , Vincent Donnefort X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240609_233307_990643_333BEE3B X-CRM114-Status: GOOD ( 16.51 ) 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 When the hypervisor receives a SError or synchronous exception (EL2h) while running with the __kvm_hyp_vector and if ELR_EL2 doesn't point to an extable entry, it panics indirectly by overwriting ELR with the address of a panic handler in order for the asm routine it returns to to ERET into the handler. However, this clobbers ELR_EL2 for the handler itself. As a result, hyp_panic(), when retrieving what it believes to be the PC where the exception happened, actually ends up reading the address of the panic handler that called it! This results in an erroneous and confusing panic message where the source of any synchronous exception (e.g. BUG() or kCFI) appears to be __guest_exit_panic, making it hard to locate the actual BRK instruction. Therefore, store the original ELR_EL2 in the per-CPU kvm_hyp_ctxt and point the sysreg to a routine that first restores it to its previous value before running __guest_exit_panic. Fixes: 7db21530479f ("KVM: arm64: Restore hyp when panicking in guest context") Signed-off-by: Pierre-Clément Tosi Acked-by: Will Deacon --- arch/arm64/kernel/asm-offsets.c | 1 + arch/arm64/kvm/hyp/entry.S | 8 ++++++++ arch/arm64/kvm/hyp/include/hyp/switch.h | 5 +++-- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/arch/arm64/kernel/asm-offsets.c b/arch/arm64/kernel/asm-offsets.c index 81496083c041..27de1dddb0ab 100644 --- a/arch/arm64/kernel/asm-offsets.c +++ b/arch/arm64/kernel/asm-offsets.c @@ -128,6 +128,7 @@ int main(void) DEFINE(VCPU_FAULT_DISR, offsetof(struct kvm_vcpu, arch.fault.disr_el1)); DEFINE(VCPU_HCR_EL2, offsetof(struct kvm_vcpu, arch.hcr_el2)); DEFINE(CPU_USER_PT_REGS, offsetof(struct kvm_cpu_context, regs)); + DEFINE(CPU_ELR_EL2, offsetof(struct kvm_cpu_context, sys_regs[ELR_EL2])); DEFINE(CPU_RGSR_EL1, offsetof(struct kvm_cpu_context, sys_regs[RGSR_EL1])); DEFINE(CPU_GCR_EL1, offsetof(struct kvm_cpu_context, sys_regs[GCR_EL1])); DEFINE(CPU_APIAKEYLO_EL1, offsetof(struct kvm_cpu_context, sys_regs[APIAKEYLO_EL1])); diff --git a/arch/arm64/kvm/hyp/entry.S b/arch/arm64/kvm/hyp/entry.S index f3aa7738b477..4433a234aa9b 100644 --- a/arch/arm64/kvm/hyp/entry.S +++ b/arch/arm64/kvm/hyp/entry.S @@ -83,6 +83,14 @@ alternative_else_nop_endif eret sb +SYM_INNER_LABEL(__guest_exit_restore_elr_and_panic, SYM_L_GLOBAL) + // x2-x29,lr: vcpu regs + // vcpu x0-x1 on the stack + + adr_this_cpu x0, kvm_hyp_ctxt, x1 + ldr x0, [x0, #CPU_ELR_EL2] + msr elr_el2, x0 + SYM_INNER_LABEL(__guest_exit_panic, SYM_L_GLOBAL) // x2-x29,lr: vcpu regs // vcpu x0-x1 on the stack diff --git a/arch/arm64/kvm/hyp/include/hyp/switch.h b/arch/arm64/kvm/hyp/include/hyp/switch.h index a92566f36022..ed9a63f1f7bf 100644 --- a/arch/arm64/kvm/hyp/include/hyp/switch.h +++ b/arch/arm64/kvm/hyp/include/hyp/switch.h @@ -689,7 +689,7 @@ static inline bool fixup_guest_exit(struct kvm_vcpu *vcpu, u64 *exit_code) static inline void __kvm_unexpected_el2_exception(void) { - extern char __guest_exit_panic[]; + extern char __guest_exit_restore_elr_and_panic[]; unsigned long addr, fixup; struct kvm_exception_table_entry *entry, *end; unsigned long elr_el2 = read_sysreg(elr_el2); @@ -711,7 +711,8 @@ static inline void __kvm_unexpected_el2_exception(void) } /* Trigger a panic after restoring the hyp context. */ - write_sysreg(__guest_exit_panic, elr_el2); + this_cpu_ptr(&kvm_hyp_ctxt)->sys_regs[ELR_EL2] = elr_el2; + write_sysreg(__guest_exit_restore_elr_and_panic, elr_el2); } #endif /* __ARM64_KVM_HYP_SWITCH_H__ */ From patchwork Mon Jun 10 06:32:31 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Pierre-Cl=C3=A9ment_Tosi?= X-Patchwork-Id: 13691559 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 83934C27C5E for ; Mon, 10 Jun 2024 06:33:31 +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:Cc:To:From:Subject:Message-ID: References:Mime-Version:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=HYEJE6O1x1nANDf9eBJYpHSw5ZYgZLUHHnyGtjpTt6g=; b=axlNrUrf1qtZoCQ5ufJ/SCLj9r s4KlBUQLmHnS+jU0momyZ/qWuKz7akaOrUBq0giOmNiTC/8J6Cv97ByVdS1bwkR7R3/68XFzE+mji no3wZdzmxGlU7A0rjjt/vL8Vvx69TVnqq+H4pjrw3miJssdQk68YzgOM1N9RCB2/yHk55oNP84UGp zORQC2eMSChpLNo+hQ6jBuRgi0GvYd/7otFMh7bXHXVi9KUYCLfasI62lCbk1wfzvOKBLuWaz3FwF uY2sLe2daQIvHNv9ftTTVdgdxMUSJl1ofd4VJtfZaOq7/+BaYmRvSymGqTwuMztACVOdLds7Bw1Uw S8HcBhpQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sGYah-00000003zEH-2n0y; Mon, 10 Jun 2024 06:33:15 +0000 Received: from mail-yw1-x1149.google.com ([2607:f8b0:4864:20::1149]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sGYab-00000003zAq-3UhZ for linux-arm-kernel@lists.infradead.org; Mon, 10 Jun 2024 06:33:11 +0000 Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-62a080977a5so75953417b3.0 for ; Sun, 09 Jun 2024 23:33:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1718001186; x=1718605986; darn=lists.infradead.org; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:from:to:cc:subject:date:message-id :reply-to; bh=Ev2HO0qDfqZpObOP/EpmEGn4LzOsyqIcz+fCTzlf7nU=; b=hP2HliRTnWz/nSel5WCTN8HAKQz7MRDmqPFYcfeaehkeaBBeCGCfOE+wopSPdbgJi3 nUtsi+aEjAo3m2oKDgOvkVRY81Il1Cz6sMdhMFKvvYAclOwHBPSUXQy5w/4Z0V7g4VfJ RGOLoO4hmse/5tqMS3G94XuCGkFnMkCOchpl/SN5AXzhq/yRb1lx/1Zm/kwl6XJr4dL3 C2LJgGT1smZ3E2B+rNiDGfB6AmUsizlLsXu5iGqQ0lvCwUyxDPwnYNT6fMv2ZxgAEA3Y /czALc9wueZ+0Y0p3cLdu9/vaA7Ji30rpvG37Dp2vnQH7kNPtdHQOIbm7V0jKj2pnqlC E1tw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718001186; x=1718605986; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=Ev2HO0qDfqZpObOP/EpmEGn4LzOsyqIcz+fCTzlf7nU=; b=Eqi2jp4uSizAcnlu0/D1p38qllSU/MMrb8wC68AHWqoQG0CgEbLe13A2IMmMCyOUv7 /wlITBBwvJZq6axlBPJC2Hhf9fLUsBHsmVGReNmp/DSv8ETt280dQNoog1JAIvkwGSGK 2kLOqgL62ZzmerTroG75ujrScRfSBSTrfNep8X41pIBEC/hGKL9uLXQRlt4npbkd0PJx EJlTRiutzx/QD0yxInudVw185pM0VkJA2mdyS2VElJrM6AE+QxSeAq6GS/SI5D4T90eH 2125Hg8GWs8ZZOJKcD2yAnDNBJXYWM2fxk0RIlU3w3SOR9PLopEsoNmg0CAiFjV72iAS sQ1Q== X-Forwarded-Encrypted: i=1; AJvYcCUgH5+Mklqdj1ORtykJ1byr2KUMqVcKwiMVzBTpUVvKgOTvhbXy4dggS3ukc495HSbMY0QrZfw0lWnix1JZmFAjtLGRq2OBrAGX3sxodwoWiy3wLj8= X-Gm-Message-State: AOJu0YxgFRRwTTEKTjAxdwI6bGV9JYJLYEo2Wy0D9kUaTZK7eK3ytyR+ A036J+R9yNCdbsgjLxJ3ygv3eLAe0p22eZUPDnhH3a201pJy3dgF3jaypuqT+/tJdOA7G3tM5A= = X-Google-Smtp-Source: AGHT+IEwLr9O/yeoTB9Cb8xFfViewwFIQ4AayrMhr4eyJthDmUi3ELBBv/heAruNMSP2LyWXM5aKCg7P4Q== X-Received: from ptosi.c.googlers.com ([fda3:e722:ac3:cc00:31:98fb:c0a8:11ec]) (user=ptosi job=sendgmr) by 2002:a05:690c:640d:b0:62c:f7e2:fc4e with SMTP id 00721157ae682-62cf7e3002dmr13313137b3.2.1718001185803; Sun, 09 Jun 2024 23:33:05 -0700 (PDT) Date: Mon, 10 Jun 2024 07:32:31 +0100 In-Reply-To: <20240610063244.2828978-1-ptosi@google.com> Mime-Version: 1.0 References: <20240610063244.2828978-1-ptosi@google.com> X-Mailer: git-send-email 2.45.2.505.gda0bf45e8d-goog Message-ID: <20240610063244.2828978-3-ptosi@google.com> Subject: [PATCH v5 2/8] KVM: arm64: Fix __pkvm_init_switch_pgd call ABI From: " =?utf-8?q?Pierre-Cl=C3=A9ment_Tosi?= " To: kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org Cc: " =?utf-8?q?Pierre-Cl=C3=A9ment_Tosi?= " , Will Deacon , Marc Zyngier , Oliver Upton , Suzuki K Poulose , Vincent Donnefort X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240609_233309_907377_D3BEBD25 X-CRM114-Status: GOOD ( 14.15 ) 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 Fix the mismatch between the (incorrect) C signature, C call site, and asm implementation by aligning all three on an API passing the parameters (pgd and SP) separately, instead of as a bundled struct. Remove the now unnecessary memory accesses while the MMU is off from the asm, which simplifies the C caller (as it does not need to convert a VA struct pointer to PA) and makes the code slightly more robust by offsetting the struct fields from C and properly expressing the call to the C compiler (e.g. type checker and kCFI). Fixes: f320bc742bc2 ("KVM: arm64: Prepare the creation of s1 mappings at EL2") Signed-off-by: Pierre-Clément Tosi Acked-by: Will Deacon --- arch/arm64/include/asm/kvm_hyp.h | 4 ++-- arch/arm64/kvm/hyp/nvhe/hyp-init.S | 24 +++++++++++++----------- arch/arm64/kvm/hyp/nvhe/setup.c | 4 ++-- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/arch/arm64/include/asm/kvm_hyp.h b/arch/arm64/include/asm/kvm_hyp.h index 3e80464f8953..181e10e2575b 100644 --- a/arch/arm64/include/asm/kvm_hyp.h +++ b/arch/arm64/include/asm/kvm_hyp.h @@ -123,8 +123,8 @@ void __noreturn __hyp_do_panic(struct kvm_cpu_context *host_ctxt, u64 spsr, #endif #ifdef __KVM_NVHE_HYPERVISOR__ -void __pkvm_init_switch_pgd(phys_addr_t phys, unsigned long size, - phys_addr_t pgd, void *sp, void *cont_fn); +void __pkvm_init_switch_pgd(phys_addr_t pgd, unsigned long sp, + void (*fn)(void)); int __pkvm_init(phys_addr_t phys, unsigned long size, unsigned long nr_cpus, unsigned long *per_cpu_base, u32 hyp_va_bits); void __noreturn __host_enter(struct kvm_cpu_context *host_ctxt); diff --git a/arch/arm64/kvm/hyp/nvhe/hyp-init.S b/arch/arm64/kvm/hyp/nvhe/hyp-init.S index 2994878d68ea..3a2836a52e85 100644 --- a/arch/arm64/kvm/hyp/nvhe/hyp-init.S +++ b/arch/arm64/kvm/hyp/nvhe/hyp-init.S @@ -265,33 +265,35 @@ alternative_else_nop_endif SYM_CODE_END(__kvm_handle_stub_hvc) +/* + * void __pkvm_init_switch_pgd(phys_addr_t pgd, unsigned long sp, + * void (*fn)(void)); + */ SYM_FUNC_START(__pkvm_init_switch_pgd) /* Turn the MMU off */ pre_disable_mmu_workaround - mrs x2, sctlr_el2 - bic x3, x2, #SCTLR_ELx_M - msr sctlr_el2, x3 + mrs x3, sctlr_el2 + bic x4, x3, #SCTLR_ELx_M + msr sctlr_el2, x4 isb tlbi alle2 /* Install the new pgtables */ - ldr x3, [x0, #NVHE_INIT_PGD_PA] - phys_to_ttbr x4, x3 + phys_to_ttbr x5, x0 alternative_if ARM64_HAS_CNP - orr x4, x4, #TTBR_CNP_BIT + orr x5, x5, #TTBR_CNP_BIT alternative_else_nop_endif - msr ttbr0_el2, x4 + msr ttbr0_el2, x5 /* Set the new stack pointer */ - ldr x0, [x0, #NVHE_INIT_STACK_HYP_VA] - mov sp, x0 + mov sp, x1 /* And turn the MMU back on! */ dsb nsh isb - set_sctlr_el2 x2 - ret x1 + set_sctlr_el2 x3 + ret x2 SYM_FUNC_END(__pkvm_init_switch_pgd) .popsection diff --git a/arch/arm64/kvm/hyp/nvhe/setup.c b/arch/arm64/kvm/hyp/nvhe/setup.c index 859f22f754d3..598f688b678f 100644 --- a/arch/arm64/kvm/hyp/nvhe/setup.c +++ b/arch/arm64/kvm/hyp/nvhe/setup.c @@ -316,7 +316,7 @@ int __pkvm_init(phys_addr_t phys, unsigned long size, unsigned long nr_cpus, { struct kvm_nvhe_init_params *params; void *virt = hyp_phys_to_virt(phys); - void (*fn)(phys_addr_t params_pa, void *finalize_fn_va); + typeof(__pkvm_init_switch_pgd) *fn; int ret; BUG_ON(kvm_check_pvm_sysreg_table()); @@ -340,7 +340,7 @@ int __pkvm_init(phys_addr_t phys, unsigned long size, unsigned long nr_cpus, /* Jump in the idmap page to switch to the new page-tables */ params = this_cpu_ptr(&kvm_init_params); fn = (typeof(fn))__hyp_pa(__pkvm_init_switch_pgd); - fn(__hyp_pa(params), __pkvm_init_finalise); + fn(params->pgd_pa, params->stack_hyp_va, __pkvm_init_finalise); unreachable(); } From patchwork Mon Jun 10 06:32:32 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Pierre-Cl=C3=A9ment_Tosi?= X-Patchwork-Id: 13691560 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 26400C27C6E for ; Mon, 10 Jun 2024 06:33:32 +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:Cc:To:From:Subject:Message-ID: References:Mime-Version:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=E1ut5FbHGjR3Gy20eZcQWgv7kRiUISbi/Jw9HtdkbjE=; b=MxelQn2u7j/Is8nr2IKhFdhpQ5 dyK2v0VcGVkK5ycGtk+UjEgbkUP612cCzx+N2th/1AOff05LAxpk9wHIWU/5+q+Aa2C98pac4y0Sf Xwyh1LnnWb1Lf0PsZvAt1NrhOCtzv+YSbgVPLc4dM+HOxTyy0FZsa1dA1VN02wUx0JsqDuZ9ofYni eaVdPbUIW5eYiqQW1ka+KFst+PKajsWHE0w6qVKxpQoyP1MpZF/3vGqlK58YMCiGaPzPgNWh2R3Q7 RtX0j9ExdPM8ODMugBVjRtP2R8BT/mopyQiEfyq/5JQU4kwzjJi8faxWjHSYB0ijqii2gnhjJT1eB 3zrSuK+w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sGYan-00000003zHB-1fnc; Mon, 10 Jun 2024 06:33:21 +0000 Received: from mail-yb1-xb49.google.com ([2607:f8b0:4864:20::b49]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sGYaf-00000003zBS-2YTm for linux-arm-kernel@lists.infradead.org; Mon, 10 Jun 2024 06:33:15 +0000 Received: by mail-yb1-xb49.google.com with SMTP id 3f1490d57ef6-dfa74b3e6cbso7449776276.2 for ; Sun, 09 Jun 2024 23:33:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1718001188; x=1718605988; darn=lists.infradead.org; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:from:to:cc:subject:date:message-id :reply-to; bh=FAg4zwCV0ETMYk7uJAuzLLD4Wj6HS+UWIuwSFsyOCeM=; b=H3x1BHoLnfP9puSh6JaEvNsZ8aY0p+o1iqduUZiI4s+6bZtgJ/PUJ7IjH6Galej61w fwXHUOMYjdUfeSwsLjTIELVMyQZZJTPqcpUAzRb0UD2VQBZtEh2rEBBRRrYZlgafcbgb wRtWHW0Yq8lLtmkUtJgJFJes6OtpIYi97OHMhcvTr3U8DcX/twwPOOCvdhNcPc4d9GkY npKO85LYjY4Sq9e4DAx9F8pPe2gHqMk4vCVhXhUZ4TM/HoPR+mQXhWdU11ggs04uERTr 87OUKYAqNHKbcGbijMbsYJp3Bo8yoc3fUqZMrFoRKnHbI4CO77OgDE18wVJHeBqBMWkQ GqWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718001188; x=1718605988; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=FAg4zwCV0ETMYk7uJAuzLLD4Wj6HS+UWIuwSFsyOCeM=; b=XxRj44c/txS4suf6UgO6V3J4S1tXkh+vaqq2z3675rSu9Js+w1zdfI2keqopvStdso sx4YUhmprF4/06vkT6S5ZH+D2BmDV3w2OdthUQEpkDpbRIHQql5EfUlK4OxCqGU0pzSi LsCfkNS1CVMjbq+oK2Z2j56khJ5VGyND0XafdtPg3pbPwv4DbZJ100kMjli8gA8UyiJL gGO0PRjN6oR2R6S9Jvv2o7nveg1CifIyL8iVB9NegDxia5e8xl1h/do/lqgTPFPc0U75 g+3zaYwlGKCrTA2KlOYdwPTjK/xDaIeNxTdndGerkiEtpNY1v6KTDsPTu4iv9PMBJAth 9kbg== X-Forwarded-Encrypted: i=1; AJvYcCW3UJeOEEhQ4kxinC0a3q0SVDYnvJLo8qxhg9MsE47wgdFOk1kNdM78MDEz4atE9GKHZIj9uA4OE9wZx2eTB2ommUMYACsBLvWGFY8npmPVQQjUPwY= X-Gm-Message-State: AOJu0YwTrq6s/vQGE4WGNTIkBmy89kylb9fwHnIn+/M3BFzEHJZxHUeZ iaOI+J977vOM8KBMwMq4ZNiXM7kS7SrkjMylQ8AbXOot8UB0+ruBc8E24KZFsJ8O2C+gbucELQ= = X-Google-Smtp-Source: AGHT+IFreq9wyxrRYtilc13+BKJ6v9CVdYWcuPyBidJggSdMr5wZPl1j8+ICTd1AZf0bVymxH29Mv4wpGg== X-Received: from ptosi.c.googlers.com ([fda3:e722:ac3:cc00:31:98fb:c0a8:11ec]) (user=ptosi job=sendgmr) by 2002:a05:6902:20c5:b0:df7:b717:10c2 with SMTP id 3f1490d57ef6-dfaf6524ed6mr2518522276.2.1718001188121; Sun, 09 Jun 2024 23:33:08 -0700 (PDT) Date: Mon, 10 Jun 2024 07:32:32 +0100 In-Reply-To: <20240610063244.2828978-1-ptosi@google.com> Mime-Version: 1.0 References: <20240610063244.2828978-1-ptosi@google.com> X-Mailer: git-send-email 2.45.2.505.gda0bf45e8d-goog Message-ID: <20240610063244.2828978-4-ptosi@google.com> Subject: [PATCH v5 3/8] KVM: arm64: nVHE: Simplify invalid_host_el2_vect From: " =?utf-8?q?Pierre-Cl=C3=A9ment_Tosi?= " To: kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org Cc: " =?utf-8?q?Pierre-Cl=C3=A9ment_Tosi?= " , Will Deacon , Marc Zyngier , Oliver Upton , Suzuki K Poulose , Vincent Donnefort X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240609_233313_787327_2CD1ADFF X-CRM114-Status: GOOD ( 10.54 ) 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 The invalid_host_el2_vect macro is used by EL2{t,h} handlers in nVHE *host* context, which should never run with a guest context loaded. Therefore, remove the superfluous vCPU context check and branch unconditionally to hyp_panic. Signed-off-by: Pierre-Clément Tosi Acked-by: Will Deacon --- arch/arm64/kvm/hyp/nvhe/host.S | 6 ------ 1 file changed, 6 deletions(-) diff --git a/arch/arm64/kvm/hyp/nvhe/host.S b/arch/arm64/kvm/hyp/nvhe/host.S index 135cfb294ee5..3d610fc51f4d 100644 --- a/arch/arm64/kvm/hyp/nvhe/host.S +++ b/arch/arm64/kvm/hyp/nvhe/host.S @@ -197,12 +197,6 @@ SYM_FUNC_END(__host_hvc) sub x0, sp, x0 // x0'' = sp' - x0' = (sp + x0) - sp = x0 sub sp, sp, x0 // sp'' = sp' - x0 = (sp + x0) - x0 = sp - /* If a guest is loaded, panic out of it. */ - stp x0, x1, [sp, #-16]! - get_loaded_vcpu x0, x1 - cbnz x0, __guest_exit_panic - add sp, sp, #16 - /* * The panic may not be clean if the exception is taken before the host * context has been saved by __host_exit or after the hyp context has From patchwork Mon Jun 10 06:32:33 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Pierre-Cl=C3=A9ment_Tosi?= X-Patchwork-Id: 13691561 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 24DC1C27C5F for ; Mon, 10 Jun 2024 06:33:38 +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:Cc:To:From:Subject:Message-ID: References:Mime-Version:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=kpJPJ421Br39f6b81PKqHYAOIJ6IdQqNvd4LWmVGCPw=; b=CffMCkkkJL6FFstZlk8h8chhaP hS3cBsY/BcQmtcuLXd8P7FA6DiykR4sLdWYXD+/r1rtS9uv2VIjFNLhejW9g9hHI0+vixhoe9RKAx 2CJVq5s+3wulwv4tn1PFj53APro8HQ7Sm5BiCe1wuXu7l8gV54SU3Cz4e3Va+A+SwWC5LaRnolXWg 06B+8U+cuY0M6xFbf/xGlL1/pNHWdg/myOr38q5YBmaIY9Va0vV8lVd2XSAIwsVrJgj5lpAja8hi6 ZXjTAKo84PWymsSxRaGPGh6b8aXWtu5CKpJiyKTJxQyndWfdGFSwPTxsTZbM1z+6IBGvWQhqwSDBz 5yzqVQcw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sGYap-00000003zIk-0cbv; Mon, 10 Jun 2024 06:33:23 +0000 Received: from mail-ej1-x64a.google.com ([2a00:1450:4864:20::64a]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sGYah-00000003zCr-46c0 for linux-arm-kernel@lists.infradead.org; Mon, 10 Jun 2024 06:33:17 +0000 Received: by mail-ej1-x64a.google.com with SMTP id a640c23a62f3a-a6ef729b8a7so121639866b.1 for ; Sun, 09 Jun 2024 23:33:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1718001191; x=1718605991; darn=lists.infradead.org; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:from:to:cc:subject:date:message-id :reply-to; bh=z0udD/PdRvQwx4wKxPuf11kZ4dOxHkqKwOOLvcn5nZA=; b=tX6lGDm3F515l47IdFrlTEmzZPapvpeknIldC2mQnjrClczcIcRRu80MyBr7xNnwbd SY/yBszEjEn2O9UPvaRbQCxULTbUGmp0ZoSX1wOaG/Hu/XAG5e0pSiQZe6PPZJODm/XK JCFApIzvF448nZY+67X0P4eucjyv5dhTmVcwIlO/p5mRCNAFGkdpbOc2sjvXASQAL13w FFr+1NWxADo+C3L+pEocuARvkJcs7Wev/0eoGL9kZ0xMSfJDCteV9NhvrN4gqQn62CcT I2j6J3aLZraQr2mXH0Bie168PT9Bsz6li7+SbPU4xy3WBe0A21l/44rlRT7RKNKfQm38 uFsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718001191; x=1718605991; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=z0udD/PdRvQwx4wKxPuf11kZ4dOxHkqKwOOLvcn5nZA=; b=L6JVa9xV3kl2silILxbnpkwRw3KSbNl4J65fdLGvhEjSmnyx3ga0ysi6Oo0iJxWbIj 5WJunnIS1NwtgjictDIM6jRmz0DBvQ9mJmPvBhCdocQvkGjUBOfpKyDeTYh8/FD5XaN6 YStbR1kDcH0/rwOFRDLGIOXm5vJcq6wpf8M+zSfuRMcwChFm49sP7bkLvioTnBs8OHB4 JgHKscDSDLOxfJHY+KO5N/e40Fm/e1qycQokL3pMrDcDZUIO+Og+Xs0yakx9v1GMCJh/ +/nJeXqSONeLovpsAykamsslImyx2/d3qHWc5gieUzuJSttKiQh4HFQaXSSLbkVODIkn U+dw== X-Forwarded-Encrypted: i=1; AJvYcCVneC1ZluMZB7FmBtnwO/wRX/dW7e+7MCG03vEYbpdGWK1LE/NM4IohtEAHwrQtA2Z1vQ6+AeWW++TTpQMnV0aFmdXG61ryEOKUcXkUSw5FkaT4R2k= X-Gm-Message-State: AOJu0Yxrkdr6wash1xci/MlsTNwVljuu3dx8jalXBQywYzoOCO3430mX YtD+iIyNlHxPhO6UuI4/UO1QSL31tDvQNmJ3v4u6AE9bsTuyREReyDFPQqKj3E9zSJ5S6HgsiQ= = X-Google-Smtp-Source: AGHT+IGv+s66RkOnG2No4QDLJnAjBEudC4CdDJBYCyTNdZf9o4rJX0PEOZM4CVBe0sIJilA7BZCLdN9lgQ== X-Received: from ptosi.c.googlers.com ([fda3:e722:ac3:cc00:31:98fb:c0a8:11ec]) (user=ptosi job=sendgmr) by 2002:a17:906:1cc5:b0:a6e:f44d:3c65 with SMTP id a640c23a62f3a-a6ef44d6407mr655866b.0.1718001190442; Sun, 09 Jun 2024 23:33:10 -0700 (PDT) Date: Mon, 10 Jun 2024 07:32:33 +0100 In-Reply-To: <20240610063244.2828978-1-ptosi@google.com> Mime-Version: 1.0 References: <20240610063244.2828978-1-ptosi@google.com> X-Mailer: git-send-email 2.45.2.505.gda0bf45e8d-goog Message-ID: <20240610063244.2828978-5-ptosi@google.com> Subject: [PATCH v5 4/8] KVM: arm64: nVHE: gen-hyprel: Skip R_AARCH64_ABS32 From: " =?utf-8?q?Pierre-Cl=C3=A9ment_Tosi?= " To: kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org Cc: " =?utf-8?q?Pierre-Cl=C3=A9ment_Tosi?= " , Will Deacon , Marc Zyngier , Oliver Upton , Suzuki K Poulose , Vincent Donnefort X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240609_233316_114758_34A06864 X-CRM114-Status: GOOD ( 10.96 ) 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 Ignore R_AARCH64_ABS32 relocations, instead of panicking, when emitting the relocation table of the hypervisor. The toolchain might produce them when generating function calls with kCFI to represent the 32-bit type ID which can then be resolved across compilation units at link time. These are NOT actual 32-bit addresses and are therefore not needed in the final (runtime) relocation table (which is unlikely to use 32-bit absolute addresses for arm64 anyway). Signed-off-by: Pierre-Clément Tosi Acked-by: Will Deacon --- arch/arm64/kvm/hyp/nvhe/gen-hyprel.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/arch/arm64/kvm/hyp/nvhe/gen-hyprel.c b/arch/arm64/kvm/hyp/nvhe/gen-hyprel.c index 6bc88a756cb7..b63f4e1c1033 100644 --- a/arch/arm64/kvm/hyp/nvhe/gen-hyprel.c +++ b/arch/arm64/kvm/hyp/nvhe/gen-hyprel.c @@ -50,6 +50,9 @@ #ifndef R_AARCH64_ABS64 #define R_AARCH64_ABS64 257 #endif +#ifndef R_AARCH64_ABS32 +#define R_AARCH64_ABS32 258 +#endif #ifndef R_AARCH64_PREL64 #define R_AARCH64_PREL64 260 #endif @@ -383,6 +386,9 @@ static void emit_rela_section(Elf64_Shdr *sh_rela) case R_AARCH64_ABS64: emit_rela_abs64(rela, sh_orig_name); break; + /* Allow 32-bit absolute relocation, for kCFI type hashes. */ + case R_AARCH64_ABS32: + break; /* Allow position-relative data relocations. */ case R_AARCH64_PREL64: case R_AARCH64_PREL32: From patchwork Mon Jun 10 06:32:34 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Pierre-Cl=C3=A9ment_Tosi?= X-Patchwork-Id: 13691562 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 5271FC27C5E for ; Mon, 10 Jun 2024 06:33:38 +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:Cc:To:From:Subject:Message-ID: References:Mime-Version:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=bvQu7qlZJ8MwijVaxl57CP9W+mdlYWhPw7OoTARYBVw=; b=F8lHHICsMOZDvq5r6AVWkvPKOp QgSL/uDthXF73Pogcgi9wN/EC+ZhVB+LBgtTJG3h+uABeBTxfhW4R9K4/BSvZ/UhaGzeJc1TJeKDV sSEjINdqlfcptDKHtaxXdxWdvQjjNtoC8lYymgweUoX3VnQgmhp3062eHwiiiuraGrTB9w2u/bRMC zj2h6gSj8m39CBAIJVMh9lWTVuKSJXBLywt2ZBaHVdXtE0wnyQoSGrQAW8bpq6FKxzDX7KKz65dFT ASai9ATNTztIwc26G6kSvD+x12ucEB2NqxYMvvqQtwFuPKWWh0mjH55KnT7DWIrCnmPnC6FH0PCSS BmQYUPfw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sGYar-00000003zKa-1i6b; Mon, 10 Jun 2024 06:33:25 +0000 Received: from mail-yw1-x1149.google.com ([2607:f8b0:4864:20::1149]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sGYaj-00000003zDU-2H2y for linux-arm-kernel@lists.infradead.org; Mon, 10 Jun 2024 06:33:19 +0000 Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-62cec76c2f2so36791627b3.3 for ; Sun, 09 Jun 2024 23:33:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1718001193; x=1718605993; darn=lists.infradead.org; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:from:to:cc:subject:date:message-id :reply-to; bh=erSEe/z/lyxgtHPTmqJJzIqKibPHcDLT3stY+lpOvXc=; b=yx1aMKjn8yZCj8+lBejNLfF8lIuJBcT2mqdbXg1pFSj+cUyx0MMx3cZqhMAKiuo0M6 IFAnFUFY1uqt2txGZSNn7XT/jyGwzyKjGL34J21OWkC4GKHptRYyfI2miL1Evn+60c9p mwa3KCgNBWJEBRkur3Rb/TH77ntkS7apCqZItBN1uhhiLScMJeVWg6AegB2DybFtbl2e DJqrHQQ7l9BU2yp87Fos8+ELE/fP5CEqNjE/HNTO7MYEBqlvR2QSo9eGDtOQIQZS+Z6v 497M9emMiC90bCBp4vTaaHSDLtBrXu2eWpFFruEKaMcj8PyX4WUZgQkvfO7ggG9L7B3M wRkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718001193; x=1718605993; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=erSEe/z/lyxgtHPTmqJJzIqKibPHcDLT3stY+lpOvXc=; b=R2AHtATeB3MvwYeCjmg2JmdCuGCSUhu4b0qfByJIjmY2W4mGIgVxOgpEAHj+I1mVpQ kONza+nDa7EV1BitmWV8BLcqwJBQrLVdh4tiQSyJr9M9//acAydchTriSObKD3yEoYkk A/S/EbkiFLwFF9jt3naYNMs1hLFKfih7m1QwyYFiem/282Tpyw6Xh4Ys4U5mgNZ2Sa2p 12CFkrmA0mIcwxnxlXgnZss97qCuCXiqC6BAFsuDeJLXUTI1Pka0F+1fuz8RBlN2kw70 00+hdB585bObllwBK2ya1yaOn0m//L++NcsOC5gPIS7bz9VttjJ+au8rImef4SmcwRwd odCQ== X-Forwarded-Encrypted: i=1; AJvYcCU0Aq0r5HBLflOHnMv8mTMKG4Nm1bcw4GfxBUhI1EQlLpQwjwwm8ei1MNLN41NUCK9QcSyQ2g1uSO3c5bDGbnJFHXkz33Sw6KlRQSQ3LFkQIjn3y/Q= X-Gm-Message-State: AOJu0YyhK1BhwWSQmJ+LBiJePw/jHPpCLNtaCWTCUYTIHainLyVtJg5F uDoVGCvyhSd99XIzB9SUFT33uFNJSnKYId2q286OcMAWKiQq1A1ZoukN1peDpMfdsrfR0CkIRg= = X-Google-Smtp-Source: AGHT+IHneFcZIljJu58TGDzZRXW2Dq5HHh3VsxwTxsRfeFhyr4nvcrpdZeErzPsMk+6Ni5nqm5R0Pmo18g== X-Received: from ptosi.c.googlers.com ([fda3:e722:ac3:cc00:31:98fb:c0a8:11ec]) (user=ptosi job=sendgmr) by 2002:a05:690c:640d:b0:62c:f7e2:fc4e with SMTP id 00721157ae682-62cf7e3002dmr13313527b3.2.1718001193144; Sun, 09 Jun 2024 23:33:13 -0700 (PDT) Date: Mon, 10 Jun 2024 07:32:34 +0100 In-Reply-To: <20240610063244.2828978-1-ptosi@google.com> Mime-Version: 1.0 References: <20240610063244.2828978-1-ptosi@google.com> X-Mailer: git-send-email 2.45.2.505.gda0bf45e8d-goog Message-ID: <20240610063244.2828978-6-ptosi@google.com> Subject: [PATCH v5 5/8] KVM: arm64: VHE: Mark __hyp_call_panic __noreturn From: " =?utf-8?q?Pierre-Cl=C3=A9ment_Tosi?= " To: kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org Cc: " =?utf-8?q?Pierre-Cl=C3=A9ment_Tosi?= " , Will Deacon , Marc Zyngier , Oliver Upton , Suzuki K Poulose , Vincent Donnefort X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240609_233317_640958_1EB39DA3 X-CRM114-Status: UNSURE ( 9.91 ) 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: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Given that the sole purpose of __hyp_call_panic() is to call panic(), a __noreturn function, give it the __noreturn attribute, removing the need for its caller to use unreachable(). Signed-off-by: Pierre-Clément Tosi Acked-by: Will Deacon --- arch/arm64/kvm/hyp/vhe/switch.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/arch/arm64/kvm/hyp/vhe/switch.c b/arch/arm64/kvm/hyp/vhe/switch.c index d7af5f46f22a..0550b9f6317f 100644 --- a/arch/arm64/kvm/hyp/vhe/switch.c +++ b/arch/arm64/kvm/hyp/vhe/switch.c @@ -384,7 +384,7 @@ int __kvm_vcpu_run(struct kvm_vcpu *vcpu) return ret; } -static void __hyp_call_panic(u64 spsr, u64 elr, u64 par) +static void __noreturn __hyp_call_panic(u64 spsr, u64 elr, u64 par) { struct kvm_cpu_context *host_ctxt; struct kvm_vcpu *vcpu; @@ -409,7 +409,6 @@ void __noreturn hyp_panic(void) u64 par = read_sysreg_par(); __hyp_call_panic(spsr, elr, par); - unreachable(); } asmlinkage void kvm_unexpected_el2_exception(void) From patchwork Mon Jun 10 06:32:35 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Pierre-Cl=C3=A9ment_Tosi?= X-Patchwork-Id: 13691563 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 C0FF7C27C5F for ; Mon, 10 Jun 2024 06:33:52 +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:Cc:To:From:Subject:Message-ID: References:Mime-Version:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=rLLy/ogLm2H2IKXw2sHtlQFBtFCKnjEiHVWdvSHqSr0=; b=rJXaG50oJkRlfOtkH+rfj6kR0u SSfG6heS5kT/DQ4Xs0i3D5UZYwROzUXsFqbxP7PEYSUZPsyvKQlzSpsKeLa61pZrOyYM7O4v8ij8x lxJWOKAGx6oB4FEOf+OcVLqj66v7fAyNahY6yEmypCvmRwsOaQSUWwdX7O9co4LH0QINjy87Dyu45 yE4G9jU0qYJAottAmkqFRYxai0KgRRzxejqpgAxxRzG8fjtBdE/91khc94mbJKeJ8ncosSPCBhG41 jXpceBEFqmvaLyKO+KHo1XdBS2w+++iBGfZA7765/k53QCy74L645MnQkZZaT84xoindV9oM6a4or 0DGBe71g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sGYb2-00000003zTi-2Dxm; Mon, 10 Jun 2024 06:33:36 +0000 Received: from mail-ed1-x549.google.com ([2a00:1450:4864:20::549]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sGYam-00000003zEI-2RIf for linux-arm-kernel@lists.infradead.org; Mon, 10 Jun 2024 06:33:22 +0000 Received: by mail-ed1-x549.google.com with SMTP id 4fb4d7f45d1cf-57a306c4b1eso2745083a12.0 for ; Sun, 09 Jun 2024 23:33:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1718001195; x=1718605995; darn=lists.infradead.org; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:from:to:cc:subject:date:message-id :reply-to; bh=2DG6vYupY7WAr9zwo8BTUXtx1v0A9oK0vgYWOEtX0E4=; b=FXzOiF8msHKCUMoaq9DkrRLIjY5+tsJdBweXwmklfcQwHQ2wNMeYIGSkolSLh/FeUr h1Bbp1hN5vHAlrkxCbPyY7NC6j0yNeMS9Zafwl5t6Joc2lIYXYCMtfi+ajd/WbW1/IAN xpijx+NwJKzSf1zMMEzy36pAbWdvkT5i3CPq3g0RwiRPDbkBHNjSUugZ2mGv+qJHuUro MNIlWDpfEm9fAJyxkHGjRn+gN/YA33b53fgUjJ1N1Ur+H9/6LU6i6QMsPumZ1lnQXoz8 sNhYceZF6zg3HRyM3/z5F6tUIDC8tONjwkUk6PXdafHlXMVm2jeyGKI0JQLB0Fkh11j6 5JAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718001195; x=1718605995; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=2DG6vYupY7WAr9zwo8BTUXtx1v0A9oK0vgYWOEtX0E4=; b=db2H9YTtAaWDKOfpxxuJZFLX/fsohufe2kMsIyeJxvG9FT29qVa7fVsKi1KO7J4/79 KfcZveQ1p5f9/bqO5aHEtLhDIoCNZNd71OUoJ1X0CMGJABzTAVp3HBtYqKCZb5oU7XxM V8SWbZ9HDyKyZ8Itq9zFFmrVWeXHvyhZ+JkeV1wQR1jifqCAryic4EmZGyjmLhvFw9Ng bZisWxdqQ/11gs7h5S7wbCnUAYUeQxYKNzwpBaxHIxFGH3w/Xj3nJf4ynh8FfWEFxOAD KJo/7dxU7hrdEVqn/OO65GskrPCOZYyTSqPt8WmtEoxcgDXTsldXyV2dvHlQ376cdICH uJ7g== X-Forwarded-Encrypted: i=1; AJvYcCVw/8WkT3K4M2ZVUH3Ox2HOKtQ6G37buBrTj3VAMKl6fNQ2Nc8eY0T+0wDa4aazQ85k+EokT6NFZT5lH/gCvjNlQyOswzLfTvW8iBOXnmAFny97IpM= X-Gm-Message-State: AOJu0YwoBjXHOkCgD/67QEOD6ZNY6h1zHtL9y4Unq6vCYRmI3eV0f7/H eSQG0jfybl3KX+6w85oYKxIrxwORSdcVbgutQrRJszAreVT+Reo/r7AYn8eUR4j+9jkX8jMmlA= = X-Google-Smtp-Source: AGHT+IHt0FJ6sbCckrZkKJOfJcRcRL2EfcoqbTKxzqlq4WyO2vf8tBUdRX1+5ixxV1gmd31Ov951xdBvBA== X-Received: from ptosi.c.googlers.com ([fda3:e722:ac3:cc00:31:98fb:c0a8:11ec]) (user=ptosi job=sendgmr) by 2002:a05:6402:434a:b0:57c:7fc5:b3eb with SMTP id 4fb4d7f45d1cf-57c7fc5b583mr3212a12.8.1718001195339; Sun, 09 Jun 2024 23:33:15 -0700 (PDT) Date: Mon, 10 Jun 2024 07:32:35 +0100 In-Reply-To: <20240610063244.2828978-1-ptosi@google.com> Mime-Version: 1.0 References: <20240610063244.2828978-1-ptosi@google.com> X-Mailer: git-send-email 2.45.2.505.gda0bf45e8d-goog Message-ID: <20240610063244.2828978-7-ptosi@google.com> Subject: [PATCH v5 6/8] arm64: Introduce esr_brk_comment, esr_is_cfi_brk From: " =?utf-8?q?Pierre-Cl=C3=A9ment_Tosi?= " To: kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org Cc: " =?utf-8?q?Pierre-Cl=C3=A9ment_Tosi?= " , Will Deacon , Marc Zyngier , Oliver Upton , Suzuki K Poulose , Vincent Donnefort X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240609_233320_646423_538386C2 X-CRM114-Status: GOOD ( 14.53 ) 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 As it is already used in two places, move esr_comment() to a header for re-use, with a clearer name. Introduce esr_is_cfi_brk() to detect kCFI BRK syndromes, currently used by early_brk64() but soon to also be used by hypervisor code. Signed-off-by: Pierre-Clément Tosi Acked-by: Will Deacon --- arch/arm64/include/asm/esr.h | 11 +++++++++++ arch/arm64/kernel/debug-monitors.c | 4 +--- arch/arm64/kernel/traps.c | 8 +++----- arch/arm64/kvm/handle_exit.c | 2 +- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/arch/arm64/include/asm/esr.h b/arch/arm64/include/asm/esr.h index 7abf09df7033..77569d207ecf 100644 --- a/arch/arm64/include/asm/esr.h +++ b/arch/arm64/include/asm/esr.h @@ -379,6 +379,11 @@ #ifndef __ASSEMBLY__ #include +static inline unsigned long esr_brk_comment(unsigned long esr) +{ + return esr & ESR_ELx_BRK64_ISS_COMMENT_MASK; +} + static inline bool esr_is_data_abort(unsigned long esr) { const unsigned long ec = ESR_ELx_EC(esr); @@ -386,6 +391,12 @@ static inline bool esr_is_data_abort(unsigned long esr) return ec == ESR_ELx_EC_DABT_LOW || ec == ESR_ELx_EC_DABT_CUR; } +static inline bool esr_is_cfi_brk(unsigned long esr) +{ + return ESR_ELx_EC(esr) == ESR_ELx_EC_BRK64 && + (esr_brk_comment(esr) & ~CFI_BRK_IMM_MASK) == CFI_BRK_IMM_BASE; +} + static inline bool esr_fsc_is_translation_fault(unsigned long esr) { /* Translation fault, level -1 */ diff --git a/arch/arm64/kernel/debug-monitors.c b/arch/arm64/kernel/debug-monitors.c index 64f2ecbdfe5c..024a7b245056 100644 --- a/arch/arm64/kernel/debug-monitors.c +++ b/arch/arm64/kernel/debug-monitors.c @@ -312,9 +312,7 @@ static int call_break_hook(struct pt_regs *regs, unsigned long esr) * entirely not preemptible, and we can use rcu list safely here. */ list_for_each_entry_rcu(hook, list, node) { - unsigned long comment = esr & ESR_ELx_BRK64_ISS_COMMENT_MASK; - - if ((comment & ~hook->mask) == hook->imm) + if ((esr_brk_comment(esr) & ~hook->mask) == hook->imm) fn = hook->fn; } diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c index 215e6d7f2df8..9e22683aa921 100644 --- a/arch/arm64/kernel/traps.c +++ b/arch/arm64/kernel/traps.c @@ -1105,8 +1105,6 @@ static struct break_hook ubsan_break_hook = { }; #endif -#define esr_comment(esr) ((esr) & ESR_ELx_BRK64_ISS_COMMENT_MASK) - /* * Initial handler for AArch64 BRK exceptions * This handler only used until debug_traps_init(). @@ -1115,15 +1113,15 @@ int __init early_brk64(unsigned long addr, unsigned long esr, struct pt_regs *regs) { #ifdef CONFIG_CFI_CLANG - if ((esr_comment(esr) & ~CFI_BRK_IMM_MASK) == CFI_BRK_IMM_BASE) + if (esr_is_cfi_brk(esr)) return cfi_handler(regs, esr) != DBG_HOOK_HANDLED; #endif #ifdef CONFIG_KASAN_SW_TAGS - if ((esr_comment(esr) & ~KASAN_BRK_MASK) == KASAN_BRK_IMM) + if ((esr_brk_comment(esr) & ~KASAN_BRK_MASK) == KASAN_BRK_IMM) return kasan_handler(regs, esr) != DBG_HOOK_HANDLED; #endif #ifdef CONFIG_UBSAN_TRAP - if ((esr_comment(esr) & ~UBSAN_BRK_MASK) == UBSAN_BRK_IMM) + if ((esr_brk_comment(esr) & ~UBSAN_BRK_MASK) == UBSAN_BRK_IMM) return ubsan_handler(regs, esr) != DBG_HOOK_HANDLED; #endif return bug_handler(regs, esr) != DBG_HOOK_HANDLED; diff --git a/arch/arm64/kvm/handle_exit.c b/arch/arm64/kvm/handle_exit.c index b037f0a0e27e..d41447193e13 100644 --- a/arch/arm64/kvm/handle_exit.c +++ b/arch/arm64/kvm/handle_exit.c @@ -423,7 +423,7 @@ void __noreturn __cold nvhe_hyp_panic_handler(u64 esr, u64 spsr, if (mode != PSR_MODE_EL2t && mode != PSR_MODE_EL2h) { kvm_err("Invalid host exception to nVHE hyp!\n"); } else if (ESR_ELx_EC(esr) == ESR_ELx_EC_BRK64 && - (esr & ESR_ELx_BRK64_ISS_COMMENT_MASK) == BUG_BRK_IMM) { + esr_brk_comment(esr) == BUG_BRK_IMM) { const char *file = NULL; unsigned int line = 0; From patchwork Mon Jun 10 06:32:36 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Pierre-Cl=C3=A9ment_Tosi?= X-Patchwork-Id: 13691564 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 A0AD9C27C5E for ; Mon, 10 Jun 2024 06:33:54 +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:Cc:To:From:Subject:Message-ID: References:Mime-Version:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=IEqSYk7O4PTDzVvlDz4kpgUkm0OsHcZmABsjxc2iKHE=; b=xb89OSvOfs5Cq2GcQqIuu5sdRd xG8Ncp4dluK9++V4iRMgcRmLUlfvHnwjyCzrNdJVma/6yqE1hie86izjJnUbSWMie/FmcfkrTIddv EE04cBqQ6Pw7Emb6t4A/xG8f8rI/ITRCQGa5dpmaRipI0jyV6AZG1oqv8afxHm8c/GXCEcNLZEVMS 00qxM0aq5GjqDNzbxAbtURRPo9+6LRfv47v+1zxvFXolIfAjH/3lMva6Vwe0UqWAynPfcm6ckpJgF e/XyptAncePZWgqYXySGLywQQU1sd1NK+XgvcggQpQkvQig6QZSsYBKd0BMwf8Dq/eK+c4WGH3S2P hPwDl0Fg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sGYb6-00000003zWt-0qF1; Mon, 10 Jun 2024 06:33:40 +0000 Received: from mail-yb1-xb49.google.com ([2607:f8b0:4864:20::b49]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sGYam-00000003zFY-37nB for linux-arm-kernel@lists.infradead.org; Mon, 10 Jun 2024 06:33:23 +0000 Received: by mail-yb1-xb49.google.com with SMTP id 3f1490d57ef6-dfab38b7f6bso6462584276.0 for ; Sun, 09 Jun 2024 23:33:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1718001197; x=1718605997; darn=lists.infradead.org; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:from:to:cc:subject:date:message-id :reply-to; bh=dqyohViu5INtDvXVZa+s1VQcpgMXQ3O7S1A4651HaGs=; b=pTvZ+RWe2kfWJ4VIU6QYYzjspUm0ZfEZR0Vv12NJPnwrSEej3MgFgPSNhYU1WvbQoS yQJl4Qp7bizvA1ORtoeNc3wGchyo6elLGvLEGiX/gMEYQ9xT/8gI9nYSDtC611FuELPV iZMPdRFjW7NKg+wDsItfbIUWKNN23B3g7P7Jd74RPSqIfUzJjOotT3+vzePQeW/WYwpt zcjGQRUYN9DeBkjfugFnVc0EDCvu+CjL/RwaKsOuXyVcIKUrBg3et5Lpoiomb/pOkvPE M/FfL2KLtx0VzlgKMTmIZ8Zg1Uh1tSJ7LBS0dOIE8SvZKZ9Pd1Rd/maTN1FBDs4pLFKj z7+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718001197; x=1718605997; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=dqyohViu5INtDvXVZa+s1VQcpgMXQ3O7S1A4651HaGs=; b=KTH8pUOoXngrHbSo9ZEhRLjaVj/3h7EuvJiJRr8CFVRR5ZW8/9aSvQ3RWaoLtbd+o/ GZl/pIXYQspiiwfh32jD1ijQJqfm1gu7aCPxSY/WxFZVugVN1cl1M2WZULlaA6+4ogo5 CkKxNBKZkEDG/i9Q8VqT945RUmiCpvHcB4RcEYSLxmkuTy9KcdelT9p+SrdzoszMCVY1 rEOY/q1Qcbnq2mldm24IL09N/iJ+NKWjqkhQ6WZlA/A1/x0Z2at2aWyJi0yiO8XoblP8 sl9Oa6Hii68C5myrw2L7FhaQ833tVxiQPKsYMLNLMX3MkPfmjbowG9sIsdpOdGKa+61I da/Q== X-Forwarded-Encrypted: i=1; AJvYcCXmSRN68zl77X/9UdyqIsJF4nh++ecIpwEEuBDJi7DerYmYze9P+Oc8DHxe0+pEXH6jjgNqaH3VyG1qD/s4j0sLiTG00SBW26HXu7lLhEvLNmzo6/I= X-Gm-Message-State: AOJu0YxG2LJRVqtPav/Y0A92KKU6Sg7APpnMQc1NJBz+XHMiK0Dg2FsX Eid9UXyZFQicNED2rQ39/VPZW+fkTsbNive7Wd24UaQGmmeqZ5lqWIREqCj7Q96ttZ388DVJaQ= = X-Google-Smtp-Source: AGHT+IGf6WRV7HKSJskgV/e4LobW32lt+CvHAqHY8Xw+IryjRsITtuaQvaI/3e5A/41rY75n+5kl2ImpRQ== X-Received: from ptosi.c.googlers.com ([fda3:e722:ac3:cc00:31:98fb:c0a8:11ec]) (user=ptosi job=sendgmr) by 2002:a05:6902:1024:b0:dfa:56fa:bb4e with SMTP id 3f1490d57ef6-dfaf64ea21fmr2585123276.1.1718001197573; Sun, 09 Jun 2024 23:33:17 -0700 (PDT) Date: Mon, 10 Jun 2024 07:32:36 +0100 In-Reply-To: <20240610063244.2828978-1-ptosi@google.com> Mime-Version: 1.0 References: <20240610063244.2828978-1-ptosi@google.com> X-Mailer: git-send-email 2.45.2.505.gda0bf45e8d-goog Message-ID: <20240610063244.2828978-8-ptosi@google.com> Subject: [PATCH v5 7/8] KVM: arm64: Introduce print_nvhe_hyp_panic helper From: " =?utf-8?q?Pierre-Cl=C3=A9ment_Tosi?= " To: kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org Cc: " =?utf-8?q?Pierre-Cl=C3=A9ment_Tosi?= " , Will Deacon , Marc Zyngier , Oliver Upton , Suzuki K Poulose , Vincent Donnefort X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240609_233320_984897_DB790D49 X-CRM114-Status: GOOD ( 10.19 ) 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 Add a helper to display a panic banner soon to also be used for kCFI failures, to ensure that we remain consistent. Signed-off-by: Pierre-Clément Tosi Acked-by: Will Deacon --- arch/arm64/kvm/handle_exit.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/arch/arm64/kvm/handle_exit.c b/arch/arm64/kvm/handle_exit.c index d41447193e13..b3d6657a259d 100644 --- a/arch/arm64/kvm/handle_exit.c +++ b/arch/arm64/kvm/handle_exit.c @@ -411,6 +411,12 @@ void handle_exit_early(struct kvm_vcpu *vcpu, int exception_index) kvm_handle_guest_serror(vcpu, kvm_vcpu_get_esr(vcpu)); } +static void print_nvhe_hyp_panic(const char *name, u64 panic_addr) +{ + kvm_err("nVHE hyp %s at: [<%016llx>] %pB!\n", name, panic_addr, + (void *)(panic_addr + kaslr_offset())); +} + void __noreturn __cold nvhe_hyp_panic_handler(u64 esr, u64 spsr, u64 elr_virt, u64 elr_phys, u64 par, uintptr_t vcpu, @@ -439,11 +445,9 @@ void __noreturn __cold nvhe_hyp_panic_handler(u64 esr, u64 spsr, if (file) kvm_err("nVHE hyp BUG at: %s:%u!\n", file, line); else - kvm_err("nVHE hyp BUG at: [<%016llx>] %pB!\n", panic_addr, - (void *)(panic_addr + kaslr_offset())); + print_nvhe_hyp_panic("BUG", panic_addr); } else { - kvm_err("nVHE hyp panic at: [<%016llx>] %pB!\n", panic_addr, - (void *)(panic_addr + kaslr_offset())); + print_nvhe_hyp_panic("panic", panic_addr); } /* Dump the nVHE hypervisor backtrace */ From patchwork Mon Jun 10 06:32:37 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Pierre-Cl=C3=A9ment_Tosi?= X-Patchwork-Id: 13691565 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 93310C27C6E for ; Mon, 10 Jun 2024 06:34:00 +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:Cc:To:From:Subject:Message-ID: References:Mime-Version:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=T2kPueQnz56VDjk+FDbpE8QnRlqddlwz1fJsgTXHP1g=; b=oVJMFhwUaG8WS3NZbAkXgk5VmQ JrFEVBzzv57004WgNVF2+QwXgp7knvPzkG+Ya2qOUe5QTopKA++GhT7OqJ+PuTr4gY64GcVq0hJh1 bR47+cfMaIvQvu8KWTMlmOCo+1nY0+KUXf/tmklbY79E6edsZwSlUMruUbW9xcN6KhSOemJJDR8k+ A6nFCpPedfOzoGiGPU6HqA6SYdjduanV57X5MHIvtMk8lDWqmNPi5k0rKH0GZrlfaoy2IU2HiPzer 7XCOPfGro4pNv1XHlWk+hnY6spkJnTmNF9ELADZnBxQBgMEY7eqGTyZEJjSn8udgqMjISyngN58CM gzK8O70Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sGYb9-00000003zZn-2dzd; Mon, 10 Jun 2024 06:33:43 +0000 Received: from mail-ed1-x54a.google.com ([2a00:1450:4864:20::54a]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sGYaq-00000003zGy-40bc for linux-arm-kernel@lists.infradead.org; Mon, 10 Jun 2024 06:33:27 +0000 Received: by mail-ed1-x54a.google.com with SMTP id 4fb4d7f45d1cf-57c748dd112so677874a12.0 for ; Sun, 09 Jun 2024 23:33:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1718001200; x=1718606000; darn=lists.infradead.org; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:from:to:cc:subject:date:message-id :reply-to; bh=/3Fqo6uZ6WACSXr1SiKgfaQUsW+tD2BveY2g61YybgU=; b=uJpv5cQqJ3qtdJmX60z2hDV2SkUQTwyO0pPhtoOnwer+bX+fapQnPsbN4s9raFhgYT mpfc7AV1lPRyOv3TPBekD92UhyLW76vvPd9k7lO/93UqQst8IsLdc0ZrPUqS5u56XIr8 CV9p9vVg+6hpgYJt/yfECw6xNxnuFmAqS9u3M7hISpL49ipi7w0OEFcoQtYSfUALScpM zixSlYwAxtBEtMiJDmIx5Gd4l6ta/PdCzB0YrBIL7qBk+xEX0BsiAUKCYjVPwuOb0Dks xEsA+XUMqaV5iPXaAEuydFwF0iKMtlAYW60tR19GESUGqdzowtNfBxYjdNTqItKj1nZ2 G/jg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718001200; x=1718606000; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=/3Fqo6uZ6WACSXr1SiKgfaQUsW+tD2BveY2g61YybgU=; b=Yom+OFyfcGY+UCl7ACCfPjJDwWd4BSsyZHtAbGoDeSHOd7YQWazsSFTsIT17Srxxno 3rToO2zkdiCUu3Oumo5jaP2xpDPEkYjWyJ2pbGQEh/hReFGDOLlcDXGA4HYHw10WHKa1 yzFBDT0P05aJspVgNyJSp7+sgzNhe8fIboOVV53eWa9kqLuVVbhbz22wPc6zwhJtvL30 yOD+4T6Bn1VDEVq5KmVGxvYEO3YwYYPf8aQJtl3MptC1I4zF6SqeuP1j85wLfFv1MGa6 aLv3yeFwVAT3v3C1nm6gevj4fb+HhB0ZkoPeM3ahSdz84m/J8UMLTlSjBvUQ8/GRQf+b LFFA== X-Forwarded-Encrypted: i=1; AJvYcCU/e11MLCoPZAUMe9kLhFH4InYYOOAxuC/BE0ruWFAFHswpAr4To2G6RjFMJRGbcO0E11oKjLjnm4pxXyVE5Vfsi6hrqkYNUdvyVU4PIC9W/ZDBmsI= X-Gm-Message-State: AOJu0Yzlr4wvRRaH7B+AWi128dz1sTGRvFrsUzIJaN2xdDilK/BsEW7u 0wwOVrNoeyCOG+Cnlfe/CDe1+0ra2RC24xHBKKejdKK4UjVXMU8/GN7czRdjWEETGXDWoPY+sQ= = X-Google-Smtp-Source: AGHT+IGl14UbfzJFzP5FVcOdHdoo6VR8VgccIp2YuEQvM8uJdIjgJCFM5cwo5OdJoioDTQ1NLN2OfjF80w== X-Received: from ptosi.c.googlers.com ([fda3:e722:ac3:cc00:31:98fb:c0a8:11ec]) (user=ptosi job=sendgmr) by 2002:a05:6402:381b:b0:57c:803e:3a57 with SMTP id 4fb4d7f45d1cf-57c803e3c99mr3092a12.2.1718001200147; Sun, 09 Jun 2024 23:33:20 -0700 (PDT) Date: Mon, 10 Jun 2024 07:32:37 +0100 In-Reply-To: <20240610063244.2828978-1-ptosi@google.com> Mime-Version: 1.0 References: <20240610063244.2828978-1-ptosi@google.com> X-Mailer: git-send-email 2.45.2.505.gda0bf45e8d-goog Message-ID: <20240610063244.2828978-9-ptosi@google.com> Subject: [PATCH v5 8/8] KVM: arm64: nVHE: Support CONFIG_CFI_CLANG at EL2 From: " =?utf-8?q?Pierre-Cl=C3=A9ment_Tosi?= " To: kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org Cc: " =?utf-8?q?Pierre-Cl=C3=A9ment_Tosi?= " , Will Deacon , Marc Zyngier , Oliver Upton , Suzuki K Poulose , Vincent Donnefort X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240609_233325_091759_ED82A261 X-CRM114-Status: GOOD ( 17.29 ) 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 The compiler implements kCFI by adding type information (u32) above every function that might be indirectly called and, whenever a function pointer is called, injects a read-and-compare of that u32 against the value corresponding to the expected type. In case of a mismatch, a BRK instruction gets executed. When the hypervisor triggers such an exception in nVHE, it panics and triggers and exception return to EL1. Therefore, teach nvhe_hyp_panic_handler() to detect kCFI errors from the ESR and report them. If necessary, remind the user that EL2 kCFI is not affected by CONFIG_CFI_PERMISSIVE. Pass $(CC_FLAGS_CFI) to the compiler when building the nVHE hyp code. Use SYM_TYPED_FUNC_START() for __pkvm_init_switch_pgd, as nVHE can't call it directly and must use a PA function pointer from C (because it is part of the idmap page), which would trigger a kCFI failure if the type ID wasn't present. Signed-off-by: Pierre-Clément Tosi Acked-by: Will Deacon --- arch/arm64/kvm/handle_exit.c | 10 ++++++++++ arch/arm64/kvm/hyp/nvhe/Makefile | 6 +++--- arch/arm64/kvm/hyp/nvhe/hyp-init.S | 6 +++++- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/arch/arm64/kvm/handle_exit.c b/arch/arm64/kvm/handle_exit.c index b3d6657a259d..69b08ac7322d 100644 --- a/arch/arm64/kvm/handle_exit.c +++ b/arch/arm64/kvm/handle_exit.c @@ -417,6 +417,14 @@ static void print_nvhe_hyp_panic(const char *name, u64 panic_addr) (void *)(panic_addr + kaslr_offset())); } +static void kvm_nvhe_report_cfi_failure(u64 panic_addr) +{ + print_nvhe_hyp_panic("CFI failure", panic_addr); + + if (IS_ENABLED(CONFIG_CFI_PERMISSIVE)) + kvm_err(" (CONFIG_CFI_PERMISSIVE ignored for hyp failures)\n"); +} + void __noreturn __cold nvhe_hyp_panic_handler(u64 esr, u64 spsr, u64 elr_virt, u64 elr_phys, u64 par, uintptr_t vcpu, @@ -446,6 +454,8 @@ void __noreturn __cold nvhe_hyp_panic_handler(u64 esr, u64 spsr, kvm_err("nVHE hyp BUG at: %s:%u!\n", file, line); else print_nvhe_hyp_panic("BUG", panic_addr); + } else if (IS_ENABLED(CONFIG_CFI_CLANG) && esr_is_cfi_brk(esr)) { + kvm_nvhe_report_cfi_failure(panic_addr); } else { print_nvhe_hyp_panic("panic", panic_addr); } diff --git a/arch/arm64/kvm/hyp/nvhe/Makefile b/arch/arm64/kvm/hyp/nvhe/Makefile index 50fa0ffb6b7e..782b34b004be 100644 --- a/arch/arm64/kvm/hyp/nvhe/Makefile +++ b/arch/arm64/kvm/hyp/nvhe/Makefile @@ -89,9 +89,9 @@ quiet_cmd_hyprel = HYPREL $@ quiet_cmd_hypcopy = HYPCOPY $@ cmd_hypcopy = $(OBJCOPY) --prefix-symbols=__kvm_nvhe_ $< $@ -# Remove ftrace, Shadow Call Stack, and CFI CFLAGS. -# This is equivalent to the 'notrace', '__noscs', and '__nocfi' annotations. -KBUILD_CFLAGS := $(filter-out $(CC_FLAGS_FTRACE) $(CC_FLAGS_SCS) $(CC_FLAGS_CFI), $(KBUILD_CFLAGS)) +# Remove ftrace and Shadow Call Stack CFLAGS. +# This is equivalent to the 'notrace' and '__noscs' annotations. +KBUILD_CFLAGS := $(filter-out $(CC_FLAGS_FTRACE) $(CC_FLAGS_SCS), $(KBUILD_CFLAGS)) # Starting from 13.0.0 llvm emits SHT_REL section '.llvm.call-graph-profile' # when profile optimization is applied. gen-hyprel does not support SHT_REL and # causes a build failure. Remove profile optimization flags. diff --git a/arch/arm64/kvm/hyp/nvhe/hyp-init.S b/arch/arm64/kvm/hyp/nvhe/hyp-init.S index 3a2836a52e85..07120b37da35 100644 --- a/arch/arm64/kvm/hyp/nvhe/hyp-init.S +++ b/arch/arm64/kvm/hyp/nvhe/hyp-init.S @@ -5,6 +5,7 @@ */ #include +#include #include #include @@ -268,8 +269,11 @@ SYM_CODE_END(__kvm_handle_stub_hvc) /* * void __pkvm_init_switch_pgd(phys_addr_t pgd, unsigned long sp, * void (*fn)(void)); + * + * SYM_TYPED_FUNC_START() allows C to call this ID-mapped function indirectly + * using a physical pointer without triggering a kCFI failure. */ -SYM_FUNC_START(__pkvm_init_switch_pgd) +SYM_TYPED_FUNC_START(__pkvm_init_switch_pgd) /* Turn the MMU off */ pre_disable_mmu_workaround mrs x3, sctlr_el2