Re: [PATCH RESEND] KVM: when entering real mode align segment base to 16 bytes

Avi Kivity
2010-12-27T14:21:57Z

On 12/27/2010 03:01 PM, Gleb Natapov wrote:
> VMX checks that base is equal segment shifted 4 bites left. Otherwise
> guest entry fails.
>
> Signed-off-by: Gleb Natapov<gleb@redhat.com>
> --
> Same as previous one but with correct (I hope) To: header.
>
> diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
> index 2260783..45014ba 100644
> --- a/arch/x86/kvm/vmx.c
> +++ b/arch/x86/kvm/vmx.c
> @@ -1736,7 +1736,7 @@ static void fix_rmode_seg(int seg, struct kvm_save_segment *save)
> save->limit = vmcs_read32(sf->limit);
> save->ar = vmcs_read32(sf->ar_bytes);
> vmcs_write16(sf->selector, save->base>> 4);
> - vmcs_write32(sf->base, save->base& 0xfffff);
> + vmcs_write32(sf->base, save->base& 0xffff0);
> vmcs_write32(sf->limit, 0xffff);
> vmcs_write32(sf->ar_bytes, 0xf3);
> }

This looks okay, but I'm curious what happened here. If the guest will
use the segment it will fail on an incorrect address.

What's the scenario here? And what segment is involved? if it's fs or
gs, or maybe ss, I can see it working out, but hardly otherwise.