From: David Woodhouse Date: Tue, 29 Mar 2022 17:11:47 +0000 (-0400) Subject: KVM: avoid double put_page with gfn-to-pfn cache X-Git-Tag: v6.1-rc5~1620^2~27 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=79593c086eb95eb2886f36ee6f78a1d6845e1bdf;p=platform%2Fkernel%2Flinux-starfive.git KVM: avoid double put_page with gfn-to-pfn cache If the cache's user host virtual address becomes invalid, there is still a path from kvm_gfn_to_pfn_cache_refresh() where __release_gpc() could release the pfn but the gpc->pfn field has not been overwritten with an error value. If this happens, kvm_gfn_to_pfn_cache_unmap will call put_page again on the same page. Cc: stable@vger.kernel.org Fixes: 982ed0de4753 ("KVM: Reinstate gfn_to_pfn_cache with invalidation support") Signed-off-by: David Woodhouse Signed-off-by: Paolo Bonzini --- diff --git a/virt/kvm/pfncache.c b/virt/kvm/pfncache.c index ce878f4..1621f8e 100644 --- a/virt/kvm/pfncache.c +++ b/virt/kvm/pfncache.c @@ -191,6 +191,7 @@ int kvm_gfn_to_pfn_cache_refresh(struct kvm *kvm, struct gfn_to_pfn_cache *gpc, gpc->uhva = gfn_to_hva_memslot(gpc->memslot, gfn); if (kvm_is_error_hva(gpc->uhva)) { + gpc->pfn = KVM_PFN_ERR_FAULT; ret = -EFAULT; goto out; }