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

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
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
@@ -10669,7 +10669,8 @@ static inline int vcpu_block(struct kvm_vcpu *vcpu)
	case KVM_MP_STATE_INIT_RECEIVED:
		break;
	default:
		return -EINTR;
		WARN_ON_ONCE(1);
		break;
	}
	return 1;
}
@@ -11110,9 +11111,22 @@ int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu,

	vcpu_load(vcpu);

	if (!lapic_in_kernel(vcpu) &&
	    mp_state->mp_state != KVM_MP_STATE_RUNNABLE)
	switch (mp_state->mp_state) {
	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;
	}

	/*
	 * KVM_MP_STATE_INIT_RECEIVED means the processor is in