KVM: MMU: Fix rmap_write_protect() hugepage iteration bug
authorMarcelo Tosatti <mtosatti@redhat.com>
Sun, 8 Jun 2008 04:48:53 +0000 (01:48 -0300)
committerAvi Kivity <avi@qumranet.com>
Tue, 24 Jun 2008 09:17:10 +0000 (12:17 +0300)
rmap_next() does not work correctly after rmap_remove(), as it expects
the rmap chains not to change during iteration.  Fix (for now) by restarting
iteration from the beginning.

Signed-off-by: Avi Kivity <avi@qumranet.com>
arch/x86/kvm/mmu.c

index ee3f530..9628091 100644 (file)
@@ -640,6 +640,7 @@ static void rmap_write_protect(struct kvm *kvm, u64 gfn)
                        rmap_remove(kvm, spte);
                        --kvm->stat.lpages;
                        set_shadow_pte(spte, shadow_trap_nonpresent_pte);
+                       spte = NULL;
                        write_protected = 1;
                }
                spte = rmap_next(kvm, rmapp, spte);