Commit fc62a4e8 authored by Sean Christopherson's avatar Sean Christopherson
Browse files

KVM: Explicitly disallow activatating a gfn_to_pfn_cache with INVALID_GPA



Explicit disallow activating a gfn_to_pfn_cache with an error gpa, i.e.
INVALID_GPA, to ensure that KVM doesn't mistake a GPA-based cache for an
HVA-based cache (KVM uses INVALID_GPA as a magic value to differentiate
between GPA-based and HVA-based caches).

WARN if KVM attempts to activate a cache with INVALID_GPA, purely so that
new caches need to at least consider what to do with a "bad" GPA, as all
existing usage of kvm_gpc_activate() guarantees gpa != INVALID_GPA.  I.e.
removing the WARN in the future is completely reasonable if doing so would
yield cleaner/better code overall.

Reviewed-by: default avatarDavid Woodhouse <dwmw@amazon.co.uk>
Reviewed-by: default avatarPaul Durrant <paul@xen.org>
Link: https://lore.kernel.org/r/20240320001542.3203871-4-seanjc@google.com


Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
parent 5c9ca4ed
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -418,6 +418,13 @@ static int __kvm_gpc_activate(struct gfn_to_pfn_cache *gpc, gpa_t gpa, unsigned

int kvm_gpc_activate(struct gfn_to_pfn_cache *gpc, gpa_t gpa, unsigned long len)
{
	/*
	 * Explicitly disallow INVALID_GPA so that the magic value can be used
	 * by KVM to differentiate between GPA-based and HVA-based caches.
	 */
	if (WARN_ON_ONCE(kvm_is_error_gpa(gpa)))
		return -EINVAL;

	return __kvm_gpc_activate(gpc, gpa, KVM_HVA_ERR_BAD, len);
}