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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 8 Apr 2022 12:23:36 +0000 (14:23 +0200)
commit5baa1283d6984effae12de78e9b4dcc7cd3b3e6b
tree07cfe133571607a0862e5ad6477e81c252c52154
parent468b136c2ca13947477b2097bdbdaa0f79faa556
KVM: x86/emulator: Defer not-present segment check in __load_segment_descriptor()

[ Upstream commit ca85f002258fdac3762c57d12d5e6e401b6a41af ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
arch/x86/kvm/emulate.c