Commit 15748f31 authored by Paolo Bonzini's avatar Paolo Bonzini Committed by Lin Wang
Browse files

selftests: kvm: check dynamic bits against KVM_X86_XCOMP_GUEST_SUPP

mainline inclusion
from mainline-v5.17-rc2
commit b19c99b9
category: feature
bugzilla: https://gitee.com/openeuler/intel-kernel/issues/I5RQLJ


CVE: NA

Intel-SIG: commit b19c99b9 selftests: kvm: check dynamic bits
against KVM_X86_XCOMP_GUEST_SUPP.

--------------------------------
Provide coverage for the new API.

Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Signed-off-by: default avatarLin Wang <lin.x.wang@intel.com>
parent 953b514a
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -437,6 +437,9 @@ struct kvm_sync_regs {

#define KVM_STATE_VMX_PREEMPTION_TIMER_DEADLINE	0x00000001

/* attributes for system fd (group 0) */
#define KVM_X86_XCOMP_GUEST_SUPP	0

struct kvm_vmx_nested_state_data {
	__u8 vmcs12[KVM_STATE_NESTED_VMX_VMCS_SIZE];
	__u8 shadow_vmcs12[KVM_STATE_NESTED_VMX_VMCS_SIZE];
+1 −0
Original line number Diff line number Diff line
@@ -1054,6 +1054,7 @@ struct kvm_ppc_resize_hpt {
#define KVM_CAP_X86_MSR_FILTER 189
#define KVM_CAP_ENFORCE_PV_FEATURE_CPUID 190
#define KVM_CAP_XSAVE2 207
#define KVM_CAP_SYS_ATTRIBUTES 209

#ifdef KVM_CAP_IRQ_ROUTING

+23 −0
Original line number Diff line number Diff line
@@ -597,8 +597,31 @@ static bool is_xfd_supported(void)

void vm_xsave_req_perm(int bit)
{
	int kvm_fd;
	u64 bitmask;
	long rc;
	struct kvm_device_attr attr = {
		.group = 0,
		.attr = KVM_X86_XCOMP_GUEST_SUPP,
		.addr = (unsigned long) &bitmask
	};

	kvm_fd = open(KVM_DEV_PATH, O_RDONLY);
	if (kvm_fd < 0) {
		print_skip("%s not available, is KVM loaded? (errno: %d)",
			   KVM_DEV_PATH, errno);
		exit(KSFT_SKIP);
	}

	rc = ioctl(kvm_fd, KVM_GET_DEVICE_ATTR, &attr);
	close(kvm_fd);
	if (rc == -1 && (errno == ENXIO || errno == EINVAL))
		exit(KSFT_SKIP);

	TEST_ASSERT(rc == 0, "KVM_GET_DEVICE_ATTR(0, KVM_X86_XCOMP_GUEST_SUPP) error: %ld", rc);

	if (!(bitmask & (1ULL << bit)))
		exit(KSFT_SKIP);

	if (!is_xfd_supported())
		exit(KSFT_SKIP);