KVM: SVM: hide TF/RF flags used by NMI singlestep
authorLadi Prosek <lprosek@redhat.com>
Wed, 21 Jun 2017 07:06:59 +0000 (09:06 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Tue, 27 Jun 2017 14:34:58 +0000 (16:34 +0200)
commit9b61174793f2aae1ef5ef843ef1cdbe52c2e36e8
treee722074f1c680e867cc163bd226ee465a7f841de
parentab2f4d73ebc33487930e7adf1dd8ed671c72827c
KVM: SVM: hide TF/RF flags used by NMI singlestep

These flags are used internally by SVM so it's cleaner to not leak
them to callers of svm_get_rflags. This is similar to how the TF
flag is handled on KVM_GUESTDBG_SINGLESTEP by kvm_get_rflags and
kvm_set_rflags.

Without this change, the flags may propagate from host VMCB to nested
VMCB or vice versa while singlestepping over a nested VM enter/exit,
and then get stuck in inappropriate places.

Example: NMI singlestepping is enabled while running L1 guest. The
instruction to step over is VMRUN and nested vmrun emulation stashes
rflags to hsave->save.rflags. Then if singlestepping is disabled
while still in L2, TF/RF will be cleared from the nested VMCB but the
next nested VM exit will restore them from hsave->save.rflags and
cause an unexpected DB exception.

Signed-off-by: Ladi Prosek <lprosek@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/svm.c