Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'kvmarm-fixes-5.14-2' into kvm-arm64/mmu/el2-tracking

KVM/arm64 fixes for 5.14, take #2

- Plug race between enabling MTE and creating vcpus
- Fix off-by-one bug when checking whether an address range is RAM

Signed-off-by: Marc Zyngier <maz@kernel.org>

+9 -5
+8 -4
arch/arm64/kvm/arm.c
··· 94 94 kvm->arch.return_nisv_io_abort_to_user = true; 95 95 break; 96 96 case KVM_CAP_ARM_MTE: 97 - if (!system_supports_mte() || kvm->created_vcpus) 98 - return -EINVAL; 99 - r = 0; 100 - kvm->arch.mte_enabled = true; 97 + mutex_lock(&kvm->lock); 98 + if (!system_supports_mte() || kvm->created_vcpus) { 99 + r = -EINVAL; 100 + } else { 101 + r = 0; 102 + kvm->arch.mte_enabled = true; 103 + } 104 + mutex_unlock(&kvm->lock); 101 105 break; 102 106 default: 103 107 r = -EINVAL;
+1 -1
arch/arm64/kvm/hyp/nvhe/mem_protect.c
··· 208 208 { 209 209 struct kvm_mem_range r1, r2; 210 210 211 - if (!find_mem_range(start, &r1) || !find_mem_range(end, &r2)) 211 + if (!find_mem_range(start, &r1) || !find_mem_range(end - 1, &r2)) 212 212 return false; 213 213 if (r1.start != r2.start) 214 214 return false;