Commit 22c6a0ef authored by Paolo Bonzini's avatar Paolo Bonzini

KVM: x86: check validity of argument to KVM_SET_MP_STATE

An invalid argument to KVM_SET_MP_STATE has no effect other than making the
vCPU fail to run at the next KVM_RUN.  Since it is extremely unlikely that
any userspace is relying on it, fail with -EINVAL just like for other
architectures.
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 87693645
...@@ -10669,7 +10669,8 @@ static inline int vcpu_block(struct kvm_vcpu *vcpu) ...@@ -10669,7 +10669,8 @@ static inline int vcpu_block(struct kvm_vcpu *vcpu)
case KVM_MP_STATE_INIT_RECEIVED: case KVM_MP_STATE_INIT_RECEIVED:
break; break;
default: default:
return -EINTR; WARN_ON_ONCE(1);
break;
} }
return 1; return 1;
} }
...@@ -11110,9 +11111,22 @@ int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, ...@@ -11110,9 +11111,22 @@ int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu,
vcpu_load(vcpu); vcpu_load(vcpu);
if (!lapic_in_kernel(vcpu) && switch (mp_state->mp_state) {
mp_state->mp_state != KVM_MP_STATE_RUNNABLE) case KVM_MP_STATE_UNINITIALIZED:
case KVM_MP_STATE_HALTED:
case KVM_MP_STATE_AP_RESET_HOLD:
case KVM_MP_STATE_INIT_RECEIVED:
case KVM_MP_STATE_SIPI_RECEIVED:
if (!lapic_in_kernel(vcpu))
goto out;
break;
case KVM_MP_STATE_RUNNABLE:
break;
default:
goto out; goto out;
}
/* /*
* KVM_MP_STATE_INIT_RECEIVED means the processor is in * KVM_MP_STATE_INIT_RECEIVED means the processor is in
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment