Commit 0921ddaa authored by Sean Christopherson's avatar Sean Christopherson Committed by Yu Zhang
Browse files

KVM: x86: Add a helper to check for a legal GPA

mainline inclusion
from mainline-v5.12-rc1
commit 4bda0e97
category: feature
bugzilla: https://gitee.com/openeuler/intel-kernel/issues/I7S3VQ
CVE: NA

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4bda0e97868a95553ba71d87f593756e1ffd654b



----------------------------------------------------------------------

Add a helper to check for a legal GPA, and use it to consolidate code
in existing, related helpers.  Future patches will extend usage to
VMX and SVM code, properly handle exceptions to the maxphyaddr rule, and
add more helpers.

No functional change intended.

Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
Message-Id: <20210204000117.3303214-4-seanjc@google.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Signed-off-by: default avatarYu Zhang <yu.c.zhang@linux.intel.com>
parent 49ebebbe
Loading
Loading
Loading
Loading
+11 −6
Original line number Diff line number Diff line
@@ -76,9 +76,19 @@ static inline int cpuid_maxphyaddr(struct kvm_vcpu *vcpu)
	return vcpu->arch.maxphyaddr;
}

static inline bool kvm_vcpu_is_legal_gpa(struct kvm_vcpu *vcpu, gpa_t gpa)
{
	return !(gpa >> cpuid_maxphyaddr(vcpu));
}

static inline bool kvm_vcpu_is_illegal_gpa(struct kvm_vcpu *vcpu, gpa_t gpa)
{
	return (gpa >= BIT_ULL(cpuid_maxphyaddr(vcpu)));
	return !kvm_vcpu_is_legal_gpa(vcpu, gpa);
}

static inline bool page_address_valid(struct kvm_vcpu *vcpu, gpa_t gpa)
{
	return PAGE_ALIGNED(gpa) && kvm_vcpu_is_legal_gpa(vcpu, gpa);
}

/* Intel-defined sub-features, CPUID level 0x00000007:1 (EDX) */
@@ -402,11 +412,6 @@ static __always_inline void kvm_cpu_cap_check_and_set(unsigned int x86_feature)
		kvm_cpu_cap_set(x86_feature);
}

static inline bool page_address_valid(struct kvm_vcpu *vcpu, gpa_t gpa)
{
	return PAGE_ALIGNED(gpa) && !(gpa >> cpuid_maxphyaddr(vcpu));
}

static __always_inline bool guest_pv_has(struct kvm_vcpu *vcpu,
					 unsigned int kvm_feature)
{