Linux KVM/arm64 development list
 help / color / mirror / Atom feed
From: Fuad Tabba <tabba@google.com>
To: kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org
Cc: maz@kernel.org, will@kernel.org, qperret@google.com,
	tabba@google.com,  seanjc@google.com, alexandru.elisei@arm.com,
	catalin.marinas@arm.com,  philmd@linaro.org, james.morse@arm.com,
	suzuki.poulose@arm.com,  oliver.upton@linux.dev,
	mark.rutland@arm.com, broonie@kernel.org,  joey.gouly@arm.com,
	rananta@google.com, yuzenghui@huawei.com
Subject: [PATCH v4 9/9] KVM: arm64: Ensure that SME controls are disabled in protected mode
Date: Mon,  3 Jun 2024 13:28:51 +0100	[thread overview]
Message-ID: <20240603122852.3923848-10-tabba@google.com> (raw)
In-Reply-To: <20240603122852.3923848-1-tabba@google.com>

KVM (and pKVM) do not support SME guests. Therefore KVM ensures
that the host's SME state is flushed and that SME controls for
enabling access to ZA storage and for streaming are disabled.

pKVM needs to protect against a buggy/malicious host. Ensure that
it wouldn't run a guest when protected mode is enabled should any
of the SME controls be enabled.

Signed-off-by: Fuad Tabba <tabba@google.com>
---
 arch/arm64/kvm/fpsimd.c            |  7 +++++++
 arch/arm64/kvm/hyp/nvhe/hyp-main.c | 11 +++++++++++
 2 files changed, 18 insertions(+)

diff --git a/arch/arm64/kvm/fpsimd.c b/arch/arm64/kvm/fpsimd.c
index eb21f29d91fc..521b32868d0d 100644
--- a/arch/arm64/kvm/fpsimd.c
+++ b/arch/arm64/kvm/fpsimd.c
@@ -90,6 +90,13 @@ void kvm_arch_vcpu_load_fp(struct kvm_vcpu *vcpu)
 			fpsimd_save_and_flush_cpu_state();
 		}
 	}
+
+	/*
+	 * If normal guests gain SME support, maintain this behavior for pKVM
+	 * guests, which don't support SME.
+	 */
+	WARN_ON(is_protected_kvm_enabled() && system_supports_sme() &&
+		read_sysreg_s(SYS_SVCR));
 }
 
 /*
diff --git a/arch/arm64/kvm/hyp/nvhe/hyp-main.c b/arch/arm64/kvm/hyp/nvhe/hyp-main.c
index bd93b8a9e172..f43d845f3c4e 100644
--- a/arch/arm64/kvm/hyp/nvhe/hyp-main.c
+++ b/arch/arm64/kvm/hyp/nvhe/hyp-main.c
@@ -140,6 +140,17 @@ static void handle___kvm_vcpu_run(struct kvm_cpu_context *host_ctxt)
 		struct pkvm_hyp_vcpu *hyp_vcpu;
 		struct kvm *host_kvm;
 
+		/*
+		 * KVM (and pKVM) doesn't support SME guests for now, and
+		 * ensures that SME features aren't enabled in pstate when
+		 * loading a vcpu. Therefore, if SME features enabled the host
+		 * is misbehaving.
+		 */
+		if (unlikely(system_supports_sme() && read_sysreg_s(SYS_SVCR))) {
+			ret = -EINVAL;
+			goto out;
+		}
+
 		host_kvm = kern_hyp_va(host_vcpu->kvm);
 		hyp_vcpu = pkvm_load_hyp_vcpu(host_kvm->arch.pkvm.handle,
 					      host_vcpu->vcpu_idx);
-- 
2.45.1.288.g0e0cd299f1-goog


  parent reply	other threads:[~2024-06-03 12:29 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-03 12:28 [PATCH v4 0/9] KVM: arm64: Fix handling of host fpsimd/sve state in protected mode Fuad Tabba
2024-06-03 12:28 ` [PATCH v4 1/9] KVM: arm64: Reintroduce __sve_save_state Fuad Tabba
2024-06-03 13:55   ` Mark Brown
2024-06-03 14:11     ` Fuad Tabba
2024-06-03 14:16       ` Mark Brown
2024-06-03 12:28 ` [PATCH v4 2/9] KVM: arm64: Fix prototype for __sve_save_state/__sve_restore_state Fuad Tabba
2024-06-03 14:19   ` Mark Brown
2024-06-03 12:28 ` [PATCH v4 3/9] KVM: arm64: Abstract set/clear of CPTR_EL2 bits behind helper Fuad Tabba
2024-06-03 12:28 ` [PATCH v4 4/9] KVM: arm64: Specialize handling of host fpsimd state on trap Fuad Tabba
2024-06-03 12:28 ` [PATCH v4 5/9] KVM: arm64: Allocate memory mapped at hyp for host sve state in pKVM Fuad Tabba
2024-06-03 14:50   ` Mark Brown
2024-06-04  8:24     ` Fuad Tabba
2024-06-03 12:28 ` [PATCH v4 6/9] KVM: arm64: Eagerly restore host fpsimd/sve " Fuad Tabba
2024-06-03 15:52   ` Mark Brown
2024-06-04 12:03     ` Fuad Tabba
2024-06-04 13:13       ` Mark Brown
2024-06-04 13:52         ` Marc Zyngier
2024-06-04 14:07           ` Mark Brown
2024-06-03 12:28 ` [PATCH v4 7/9] KVM: arm64: Consolidate initializing the host data's fpsimd_state/sve " Fuad Tabba
2024-06-03 15:43   ` Mark Brown
2024-06-03 12:28 ` [PATCH v4 8/9] KVM: arm64: Refactor CPACR trap bit setting/clearing to use ELx format Fuad Tabba
2024-06-03 12:28 ` Fuad Tabba [this message]
2024-06-03 14:43   ` [PATCH v4 9/9] KVM: arm64: Ensure that SME controls are disabled in protected mode Mark Brown
2024-06-04 14:30 ` [PATCH v4 0/9] KVM: arm64: Fix handling of host fpsimd/sve state " Marc Zyngier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240603122852.3923848-10-tabba@google.com \
    --to=tabba@google.com \
    --cc=alexandru.elisei@arm.com \
    --cc=broonie@kernel.org \
    --cc=catalin.marinas@arm.com \
    --cc=james.morse@arm.com \
    --cc=joey.gouly@arm.com \
    --cc=kvmarm@lists.linux.dev \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=mark.rutland@arm.com \
    --cc=maz@kernel.org \
    --cc=oliver.upton@linux.dev \
    --cc=philmd@linaro.org \
    --cc=qperret@google.com \
    --cc=rananta@google.com \
    --cc=seanjc@google.com \
    --cc=suzuki.poulose@arm.com \
    --cc=will@kernel.org \
    --cc=yuzenghui@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox