lguest: fix on Intel when KVM loaded (unhandled trap 13)
PATCH 1/1 lguest: fix on Intel when KVM loaded (unhandled trap 13)
When KVM is loaded, and hence VT set up, the vmcall instruction in an lguest guest causes a #GP, not #UD.
Signed-off-by Rusty Russell <[email protected]>
--- drivers/lguest/x86/core.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-)
drivers/lguest/x86/core.c +10 -9
@@ -358,6 +358,16 @@ void lguest_arch_handle_trap(struct lg_cif (emulate_insn (cpu))return ; } +/* If KVM is active, the vmcall instruction triggers a +* General Protection Fault. Normally it triggers an +* invalid opcode fault (6): */ +case 6 : +/* We need to check if ring == GUEST_PL and +* faulting instruction == vmcall. */ +if (is_hypercall (cpu)) { +rewrite_hypercall (cpu); +return ; + }break ;case 14 :/* We've intercepted a Page Fault. */ /* The Guest accessed a virtual address that wasn't mapped.
@@ -403,15 +413,6 @@ void lguest_arch_handle_trap(struct lg_c* up the pointer now to indicate a hypercall is pending. */ cpu->hcall = (struct hcall_args *)cpu->regs;return ; -case 6 : -/* kvm hypercalls trigger an invalid opcode fault (6). -* We need to check if ring == GUEST_PL and -* faulting instruction == vmcall. */ -if (is_hypercall (cpu)) { -rewrite_hypercall (cpu); -return ; - } -break ; }/* We didn't handle the trap, so it needs to go to the Guest. */
Quoted 4 lines · On Tue, 26 May 2009 20:54:41 +0930 Rusty Russell <[email protected]> wrote:
When KVM is loaded, and hence VT set up, the vmcall instruction in an lguest guest causes a #GP, not #UD.
Signed-off-by Rusty Russell <[email protected]>
Shouldn't that be fixed in KVM ?
Alan
Quoted 4 lines · Alan Cox
On Tue, 26 May 2009 20:54:41 +0930
Rusty Russell <rusty-8n+1lVoiYb80n/[email protected]> wrote:
Quoted 8 lines
Quoted 5 lines
When KVM is loaded, and hence VT set up, the vmcall instruction in an lguest guest causes a #GP, not #UD.
Signed-off-by Rusty Russell <rusty-8n+1lVoiYb80n/[email protected]>Shouldn't that be fixed in KVM ?
KVM never saw that VMCALL or #GP.
Signature · 1 line
error compiling committee.c: too many arguments to function