From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marcelo Tosatti Subject: Re: KVM: MMU: nuke shadowed pgtable pages and pte's on memslot destruction Date: Thu, 10 Jul 2008 20:54:29 -0300 Message-ID: <20080710235429.GB5295@dmt.cnet> References: <20080704010618.GA25834@dmt.cnet> <486FAE8A.2050308@qumranet.com> <20080705192344.GA16596@dmt.cnet> <486FE48C.7030002@qumranet.com> <20080707173155.GB10372@dmt.cnet> <20080707195822.GA16787@dmt.cnet> <48761FCB.4080307@qumranet.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: kvm-devel , Hollis Blanchard , "Zhang, Xiantao" To: Avi Kivity Return-path: Received: from mx1.redhat.com ([66.187.233.31]:51659 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755382AbYGJX5U (ORCPT ); Thu, 10 Jul 2008 19:57:20 -0400 Content-Disposition: inline In-Reply-To: <48761FCB.4080307@qumranet.com> Sender: kvm-owner@vger.kernel.org List-ID: KVM: MMU: improve invalid shadow root page handling Harden kvm_mmu_zap_page() against invalid root pages that had been shadowed from memslots that are gone. Signed-off-by: Marcelo Tosatti diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index ff7cf63..7f57da6 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c @@ -930,14 +930,17 @@ static void kvm_mmu_zap_page(struct kvm *kvm, struct kvm_mmu_page *sp) } kvm_mmu_page_unlink_children(kvm, sp); if (!sp->root_count) { - if (!sp->role.metaphysical) + if (!sp->role.metaphysical && !sp->role.invalid) unaccount_shadowed(kvm, sp->gfn); hlist_del(&sp->hash_link); kvm_mmu_free_page(kvm, sp); } else { + int invalid = sp->role.invalid; list_move(&sp->link, &kvm->arch.active_mmu_pages); sp->role.invalid = 1; kvm_reload_remote_mmus(kvm); + if (!sp->role.metaphysical && !invalid) + unaccount_shadowed(kvm, sp->gfn); } kvm_mmu_reset_last_pte_updated(kvm); }