Commit 8ad48552 authored by Vitaly Kuznetsov's avatar Vitaly Kuznetsov Committed by Sean Christopherson
Browse files

KVM: selftests: Avoid infinite loop in hyperv_features when invtsc is missing



When X86_FEATURE_INVTSC is missing, guest_test_msrs_access() was supposed
to skip testing dependent Hyper-V invariant TSC feature. Unfortunately,
'continue' does not lead to that as stage is not incremented. Moreover,
'vm' allocated with vm_create_with_one_vcpu() is not freed and the test
runs out of available file descriptors very quickly.

Fixes: bd827bd7 ("KVM: selftests: Test Hyper-V invariant TSC control")
Signed-off-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
Link: https://lore.kernel.org/r/20240129085847.2674082-1-vkuznets@redhat.com


Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
parent 46fee9e3
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -454,7 +454,7 @@ static void guest_test_msrs_access(void)
		case 44:
			/* MSR is not available when CPUID feature bit is unset */
			if (!has_invtsc)
				continue;
				goto next_stage;
			msr->idx = HV_X64_MSR_TSC_INVARIANT_CONTROL;
			msr->write = false;
			msr->fault_expected = true;
@@ -462,7 +462,7 @@ static void guest_test_msrs_access(void)
		case 45:
			/* MSR is vailable when CPUID feature bit is set */
			if (!has_invtsc)
				continue;
				goto next_stage;
			vcpu_set_cpuid_feature(vcpu, HV_ACCESS_TSC_INVARIANT);
			msr->idx = HV_X64_MSR_TSC_INVARIANT_CONTROL;
			msr->write = false;
@@ -471,7 +471,7 @@ static void guest_test_msrs_access(void)
		case 46:
			/* Writing bits other than 0 is forbidden */
			if (!has_invtsc)
				continue;
				goto next_stage;
			msr->idx = HV_X64_MSR_TSC_INVARIANT_CONTROL;
			msr->write = true;
			msr->write_val = 0xdeadbeef;
@@ -480,7 +480,7 @@ static void guest_test_msrs_access(void)
		case 47:
			/* Setting bit 0 enables the feature */
			if (!has_invtsc)
				continue;
				goto next_stage;
			msr->idx = HV_X64_MSR_TSC_INVARIANT_CONTROL;
			msr->write = true;
			msr->write_val = 1;
@@ -513,6 +513,7 @@ static void guest_test_msrs_access(void)
			return;
		}

next_stage:
		stage++;
		kvm_vm_free(vm);
	}