Commit a8ba6c26 authored by Gleb Natapov's avatar Gleb Natapov Committed by Marcelo Tosatti

KVM: VMX: update live TR selector if it changes in real mode

When rmode.vm86 is active TR descriptor is updated with vm86 task values,
but selector is left intact. vmx_set_segment() makes sure that if TR
register is written into while vm86 is active the new values are saved
for use after vm86 is deactivated, but since selector is not updated on
vm86 activation/deactivation new value is lost. Fix this by writing new
selector into vmcs immediately.
Signed-off-by: default avatarGleb Natapov <gleb@redhat.com>
Signed-off-by: default avatarAvi Kivity <avi@redhat.com>
parent a3b5ba49
...@@ -2138,6 +2138,7 @@ static void vmx_set_segment(struct kvm_vcpu *vcpu, ...@@ -2138,6 +2138,7 @@ static void vmx_set_segment(struct kvm_vcpu *vcpu,
u32 ar; u32 ar;
if (vmx->rmode.vm86_active && seg == VCPU_SREG_TR) { if (vmx->rmode.vm86_active && seg == VCPU_SREG_TR) {
vmcs_write16(sf->selector, var->selector);
vmx->rmode.tr.selector = var->selector; vmx->rmode.tr.selector = var->selector;
vmx->rmode.tr.base = var->base; vmx->rmode.tr.base = var->base;
vmx->rmode.tr.limit = var->limit; vmx->rmode.tr.limit = var->limit;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment