]> www.infradead.org Git - linux.git/commitdiff
KVM: x86: Limit check IDs for KVM_SET_BOOT_CPU_ID
authorMathias Krause <minipli@grsecurity.net>
Fri, 14 Jun 2024 20:28:56 +0000 (22:28 +0200)
committerSean Christopherson <seanjc@google.com>
Tue, 18 Jun 2024 15:59:36 +0000 (08:59 -0700)
Do not accept IDs which are definitely invalid by limit checking the
passed value against KVM_MAX_VCPU_IDS and 'max_vcpu_ids' if it was
already set.

This ensures invalid values, especially on 64-bit systems, don't go
unnoticed and lead to a valid id by chance when truncated by the final
assignment.

Fixes: 73880c80aa9c ("KVM: Break dependency between vcpu index in vcpus array and vcpu_id.")
Signed-off-by: Mathias Krause <minipli@grsecurity.net>
Link: https://lore.kernel.org/r/20240614202859.3597745-3-minipli@grsecurity.net
Co-developed-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/kvm/x86.c

index bbfc3d9bb024bd67e90a58d77af626d874482f0c..f371943f2c72841062cfa044607e69c667d11437 100644 (file)
@@ -7228,6 +7228,9 @@ set_pit2_out:
                mutex_lock(&kvm->lock);
                if (kvm->created_vcpus)
                        r = -EBUSY;
+               else if (arg > KVM_MAX_VCPU_IDS ||
+                        (kvm->arch.max_vcpu_ids && arg > kvm->arch.max_vcpu_ids))
+                       r = -EINVAL;
                else
                        kvm->arch.bsp_vcpu_id = arg;
                mutex_unlock(&kvm->lock);