File kvm-pre-2.6.32-hypercalls.patch of Package kvm-kmp
Index: kvm-kmod-2.6.30.1/include/linux/kvm_para.h
===================================================================
--- kvm-kmod-2.6.30.1.orig/include/linux/kvm_para.h
+++ kvm-kmod-2.6.30.1/include/linux/kvm_para.h
@@ -53,6 +53,7 @@
#define KVM_ENOSYS 1000
#define KVM_EFAULT EFAULT
#define KVM_E2BIG E2BIG
+#define KVM_EPERM EPERM
#define KVM_HC_VAPIC_POLL_IRQ 1
#define KVM_HC_MMU_OP 2
Index: kvm-kmod-2.6.30.1/x86/x86.c
===================================================================
--- kvm-kmod-2.6.30.1.orig/x86/x86.c
+++ kvm-kmod-2.6.30.1/x86/x86.c
@@ -2877,6 +2877,11 @@ int kvm_emulate_hypercall(struct kvm_vcp
a3 &= 0xFFFFFFFF;
}
+ if (kvm_x86_ops->get_cpl(vcpu) != 0) {
+ ret = -KVM_EPERM;
+ goto out;
+ }
+
switch (nr) {
case KVM_HC_VAPIC_POLL_IRQ:
ret = 0;
@@ -2888,6 +2893,7 @@ int kvm_emulate_hypercall(struct kvm_vcp
ret = -KVM_ENOSYS;
break;
}
+out:
kvm_register_write(vcpu, VCPU_REGS_RAX, ret);
++vcpu->stat.hypercalls;
return r;