Commit 807c1425 authored by Nadav Amit's avatar Nadav Amit Committed by Paolo Bonzini

KVM: x86: SYSCALL cannot clear eflags[1]

SYSCALL emulation currently clears in 64-bit mode eflags according to
MSR_SYSCALL_MASK.  However, on bare-metal eflags[1] which is fixed to one
cannot be cleared, even if MSR_SYSCALL_MASK masks the bit.  This wrong behavior
may result in failed VM-entry, as VT disallows entry with eflags[1] cleared.

This patch sets the bit after masking eflags on syscall.
Signed-off-by: default avatarNadav Amit <namit@cs.technion.ac.il>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent b5bbf10e
...@@ -2306,6 +2306,7 @@ static int em_syscall(struct x86_emulate_ctxt *ctxt) ...@@ -2306,6 +2306,7 @@ static int em_syscall(struct x86_emulate_ctxt *ctxt)
ops->get_msr(ctxt, MSR_SYSCALL_MASK, &msr_data); ops->get_msr(ctxt, MSR_SYSCALL_MASK, &msr_data);
ctxt->eflags &= ~msr_data; ctxt->eflags &= ~msr_data;
ctxt->eflags |= EFLG_RESERVED_ONE_MASK;
#endif #endif
} else { } else {
/* legacy mode */ /* legacy mode */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment