On 10/15/21 21:55, Jim Mattson wrote:
In Linux commit afc8de0118be ("KVM: nVMX: Set LDTR to its
architecturally defined value on nested VM-Exit"), Sean suggested that
this bug was likely benign, but it turns out that--for us, at
least--it can result in live migration failures. On restore, we call
KVM_SET_SREGS before KVM_SET_NESTED_STATE, so when L2 is active at the
time of save/restore, the target vmcs01 is temporarily populated with
L2 values. Hence, the LDTR visible to L1 after the next emulated
VM-exit is L2's, rather than its own.
This issue is significant enough that it warrants a regression
test. Unfortunately, at the moment, the best we can do is check for
the LDTR persistence bug. I'd like to be able to trigger a
save/restore from within the L2 guest, but AFAICT, there's no way to
do that under qemu. Does anyone want to implement a qemu ISA test
device that triggers a save/restore when its configured I/O port is
written to?
Jim Mattson (3):
x86: Fix operand size for lldt
x86: Make set_gdt_entry usable in 64-bit mode
x86: Add a regression test for L1 LDTR persistence bug
v1 -> v2:
Reworded report messages at Sean's suggestion.
lib/x86/desc.c | 41 +++++++++++++++++++++++++++++++----------
lib/x86/desc.h | 3 ++-
lib/x86/processor.h | 2 +-
x86/cstart64.S | 1 +
x86/vmx_tests.c | 39 +++++++++++++++++++++++++++++++++++++++
5 files changed, 74 insertions(+), 12 deletions(-)
Queued patches 1 and 3; the function of 2 is also done by my own GDT/IDT
cleanup series, which is also present in Aaron's #PF tests.
Paolo