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;
openSUSE Build Service is sponsored by