KVM: x86/emulator: Defer not-present segment check in __load_segment_descriptor()
authorHou Wenlong <houwenlong.hwl@antgroup.com>
Tue, 8 Feb 2022 09:34:03 +0000 (17:34 +0800)
committerPaolo Bonzini <pbonzini@redhat.com>
Tue, 1 Mar 2022 13:50:49 +0000 (08:50 -0500)
commitca85f002258fdac3762c57d12d5e6e401b6a41af
treeec1db110dafc9a400be658a186b748695307dc1f
parent85c68eb429f7fc136b9bbb3646eb38a9e0e30fa2
KVM: x86/emulator: Defer not-present segment check in __load_segment_descriptor()

Per Intel's SDM on the "Instruction Set Reference", when
loading segment descriptor, not-present segment check should
be after all type and privilege checks. But the emulator checks
it first, then #NP is triggered instead of #GP if privilege fails
and segment is not present. Put not-present segment check after
type and privilege checks in __load_segment_descriptor().

Fixes: 38ba30ba51a00 (KVM: x86 emulator: Emulate task switch in emulator.c)
Reviewed-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Hou Wenlong <houwenlong.hwl@antgroup.com>
Message-Id: <52573c01d369f506cadcf7233812427cf7db81a7.1644292363.git.houwenlong.hwl@antgroup.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/emulate.c