在没有客户端内核修改的情况下调用qemu-kvm中的超级调用

时间:2017-08-16 05:58:51

标签: linux-kernel virtual-machine virtualization qemu kvm

我希望客户机中的用户进程调用自定义超级调用,qemu接收它。我不想对来宾内核进行任何修改 从this answer和其他材料,我知道vmcall指令将导致VMEXIT,VMM将收到其退出原因和参数。

根据Intel® 64 and IA-32 Architectures Software Developer’s Manual p.1201vmcall指令会在CPL>时触发异常。 0
所以我得出结论,我需要一个(来宾)内核接口来调用超级调用。

我发现Linux内核中的arch/x86/include/asm/kvm_para.h具有kvm_hypercallx个函数(其中x是多个参数)。但我找不到这些功能的呼叫网站。

是否可以在不修改来宾内核的情况下调用超级调用?如果是这样,怎么办?如果没有,有其他选择吗?

2 个答案:

答案 0 :(得分:1)

VMCALL在guest虚拟机(VMX非root模式)下导致任何CPL级别的VM退出。仅当CPL处于VMX根模式时才会检查CPL。

导致无条件VM退出的另一种方法是使用CPUID指令。 VMM可以通过EAX中的值区分超级调用和常规CPUID调用。

答案 1 :(得分:0)

Is it possible to invoke a hypercall without any modification of a guest kernel?

hypercall只是一种在来宾之间传递信息的方式。主机,你可以触发超级调用(就像virtio使用的hypercall2),但它对你有用吗?