[PATCH RESEND 14/30] KVM: x86: lapic: don't allow to change local apic id when using older x2apic api

From: Maxim Levitsky
Date: Mon Feb 07 2022 - 11:02:59 EST


KVM allowed to set non boot apic id via setting apic state
if using older non x2apic 32 bit apic id userspace api.

Signed-off-by: Maxim Levitsky <mlevitsk@xxxxxxxxxx>
---
arch/x86/kvm/lapic.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
index 7ff695cab27b2..aeddd68d31181 100644
--- a/arch/x86/kvm/lapic.c
+++ b/arch/x86/kvm/lapic.c
@@ -2592,15 +2592,15 @@ static int kvm_apic_state_fixup(struct kvm_vcpu *vcpu,
if (enable_apicv && (*id >> 24) != vcpu->vcpu_id)
return -EINVAL;
} else {
- if (vcpu->kvm->arch.x2apic_format) {
- if (*id != vcpu->vcpu_id)
- return -EINVAL;
- } else {
- if (set)
- *id >>= 24;
- else
- *id <<= 24;
- }
+
+ if (!vcpu->kvm->arch.x2apic_format && set)
+ *id >>= 24;
+
+ if (*id != vcpu->vcpu_id)
+ return -EINVAL;
+
+ if (!vcpu->kvm->arch.x2apic_format && !set)
+ *id <<= 24;

/* In x2APIC mode, the LDR is fixed and based on the id */
if (set)
--
2.26.3