KVM allows MTE enabled VMs to be created when the backing memory is does not have MTE enabled. Without changes to how KVM allocates memory for a VM, it is impossible to discern when the corresponding tag storage needs to be reserved. For now, disable MTE in KVM if tag storage is enabled. Signed-off-by: Alexandru Elisei <alexandru.elisei@xxxxxxx> --- arch/arm64/kvm/arm.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c index 72dc53a75d1c..1f39c2d5223d 100644 --- a/arch/arm64/kvm/arm.c +++ b/arch/arm64/kvm/arm.c @@ -38,6 +38,7 @@ #include <asm/kvm_mmu.h> #include <asm/kvm_pkvm.h> #include <asm/kvm_emulate.h> +#include <asm/memory_metadata.h> #include <asm/sections.h> #include <kvm/arm_hypercalls.h> @@ -85,7 +86,8 @@ int kvm_vm_ioctl_enable_cap(struct kvm *kvm, break; case KVM_CAP_ARM_MTE: mutex_lock(&kvm->lock); - if (!system_supports_mte() || kvm->created_vcpus) { + if (!system_supports_mte() || metadata_storage_enabled() || + kvm->created_vcpus) { r = -EINVAL; } else { r = 0; @@ -277,7 +279,7 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext) r = 1; break; case KVM_CAP_ARM_MTE: - r = system_supports_mte(); + r = system_supports_mte() && !metadata_storage_enabled(); break; case KVM_CAP_STEAL_TIME: r = kvm_arm_pvtime_supported(); -- 2.41.0