[PATCH v1 1/3] KVM: arm64: nv: Don't advertise FEAT_LPA2 for guest stage-1
From: Wei-Lin Chang
Date: Wed Sep 09 2026 - 18:22:07 EST
There is no FEAT_LPA2 support for NV guests as of now, but we missed
limiting it for the non-stage-2 granule size fields (TGRAN4, TGRAN16) in
ID_AA64MMFR0_EL1. Add the sanitisation.
Signed-off-by: Wei-Lin Chang <weilin.chang@xxxxxxx>
---
arch/arm64/kvm/nested.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/arch/arm64/kvm/nested.c b/arch/arm64/kvm/nested.c
index 3c4fc566eafc..1fd98117df23 100644
--- a/arch/arm64/kvm/nested.c
+++ b/arch/arm64/kvm/nested.c
@@ -1731,6 +1731,19 @@ u64 limit_nv_id_reg(struct kvm *kvm, u32 reg, u64 val)
/* Hide CNTPOFF if present */
val = ID_REG_LIMIT_FIELD_ENUM(val, ID_AA64MMFR0_EL1, ECV, IMP);
+ /* NV does not support FEAT_LPA2. */
+ if (SYS_FIELD_GET(ID_AA64MMFR0_EL1, TGRAN4, val) ==
+ ID_AA64MMFR0_EL1_TGRAN4_52_BIT) {
+ val &= ~ID_AA64MMFR0_EL1_TGRAN4;
+ val |= SYS_FIELD_PREP_ENUM(ID_AA64MMFR0_EL1, TGRAN4, IMP);
+ }
+
+ if (SYS_FIELD_GET(ID_AA64MMFR0_EL1, TGRAN16, val) ==
+ ID_AA64MMFR0_EL1_TGRAN16_52_BIT) {
+ val &= ~ID_AA64MMFR0_EL1_TGRAN16;
+ val |= SYS_FIELD_PREP_ENUM(ID_AA64MMFR0_EL1, TGRAN16, IMP);
+ }
+
/* Disallow unsupported S2 page sizes */
switch (PAGE_SIZE) {
case SZ_64K:
--
2.43.0