KVM: x86: Mark TSS busy during LTR emulation _after_ all fault checks
authorSean Christopherson <seanjc@google.com>
Mon, 11 Jul 2022 23:27:48 +0000 (23:27 +0000)
committerSean Christopherson <seanjc@google.com>
Thu, 14 Jul 2022 01:14:05 +0000 (18:14 -0700)
commitec6e4d863258d4bfb36d48d5e3ef68140234d688
tree4701c0bd35b304f5a73e8089baf3d770e2b215e3
parent43bb9e000ea4c62154c01844771fea25b8b83520
KVM: x86: Mark TSS busy during LTR emulation _after_ all fault checks

Wait to mark the TSS as busy during LTR emulation until after all fault
checks for the LTR have passed.  Specifically, don't mark the TSS busy if
the new TSS base is non-canonical.

Opportunistically drop the one-off !seg_desc.PRESENT check for TR as the
only reason for the early check was to avoid marking a !PRESENT TSS as
busy, i.e. the common !PRESENT is now done before setting the busy bit.

Fixes: e37a75a13cda ("KVM: x86: Emulator ignores LDTR/TR extended base on LLDT/LTR")
Reported-by: syzbot+760a73552f47a8cd0fd9@syzkaller.appspotmail.com
Cc: stable@vger.kernel.org
Cc: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
Cc: Hou Wenlong <houwenlong.hwl@antgroup.com>
Signed-off-by: Sean Christopherson <seanjc@google.com>
Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
Link: https://lore.kernel.org/r/20220711232750.1092012-2-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/kvm/emulate.c