]> git.karo-electronics.de Git - mv-sheeva.git/commitdiff
KVM: Fix guest register corruption on paravirt hypercall
authorDor Laor <dor.laor@qumranet.com>
Mon, 19 Feb 2007 14:44:49 +0000 (16:44 +0200)
committerAvi Kivity <avi@qumranet.com>
Thu, 3 May 2007 07:52:22 +0000 (10:52 +0300)
The hypercall code mixes up the ->cache_regs() and ->decache_regs()
callbacks, resulting in guest register corruption.

Signed-off-by: Dor Laor <dor.laor@qumranet.com>
Signed-off-by: Avi Kivity <avi@qumranet.com>
drivers/kvm/kvm_main.c

index dc7a8c78cbf9f31297e922d6b2c4a270ce75d21d..ff7c836ff001035fb7d4c7d74beb6c6cf2bcc16a 100644 (file)
@@ -1177,7 +1177,7 @@ int kvm_hypercall(struct kvm_vcpu *vcpu, struct kvm_run *run)
 {
        unsigned long nr, a0, a1, a2, a3, a4, a5, ret;
 
-       kvm_arch_ops->decache_regs(vcpu);
+       kvm_arch_ops->cache_regs(vcpu);
        ret = -KVM_EINVAL;
 #ifdef CONFIG_X86_64
        if (is_long_mode(vcpu)) {
@@ -1204,7 +1204,7 @@ int kvm_hypercall(struct kvm_vcpu *vcpu, struct kvm_run *run)
                ;
        }
        vcpu->regs[VCPU_REGS_RAX] = ret;
-       kvm_arch_ops->cache_regs(vcpu);
+       kvm_arch_ops->decache_regs(vcpu);
        return 1;
 }
 EXPORT_SYMBOL_GPL(kvm_hypercall);