diff options
Diffstat (limited to 'arch/x86/kvm/vmx.c')
-rw-r--r-- | arch/x86/kvm/vmx.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index b3101e368079..265fdd37b240 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c | |||
@@ -3380,13 +3380,16 @@ static bool rmode_segment_valid(struct kvm_vcpu *vcpu, int seg) | |||
3380 | u32 ar; | 3380 | u32 ar; |
3381 | 3381 | ||
3382 | vmx_get_segment(vcpu, &var, seg); | 3382 | vmx_get_segment(vcpu, &var, seg); |
3383 | var.dpl = 0x3; | ||
3384 | var.g = 0; | ||
3385 | var.db = 0; | ||
3383 | ar = vmx_segment_access_rights(&var); | 3386 | ar = vmx_segment_access_rights(&var); |
3384 | 3387 | ||
3385 | if (var.base != (var.selector << 4)) | 3388 | if (var.base != (var.selector << 4)) |
3386 | return false; | 3389 | return false; |
3387 | if (var.limit < 0xffff) | 3390 | if (var.limit < 0xffff) |
3388 | return false; | 3391 | return false; |
3389 | if (((ar | (3 << AR_DPL_SHIFT)) & ~(AR_G_MASK | AR_DB_MASK)) != 0xf3) | 3392 | if (ar != 0xf3) |
3390 | return false; | 3393 | return false; |
3391 | 3394 | ||
3392 | return true; | 3395 | return true; |