|
@@ -3380,13 +3380,16 @@ static bool rmode_segment_valid(struct kvm_vcpu *vcpu, int seg)
|
|
u32 ar;
|
|
u32 ar;
|
|
|
|
|
|
vmx_get_segment(vcpu, &var, seg);
|
|
vmx_get_segment(vcpu, &var, seg);
|
|
|
|
+ var.dpl = 0x3;
|
|
|
|
+ var.g = 0;
|
|
|
|
+ var.db = 0;
|
|
ar = vmx_segment_access_rights(&var);
|
|
ar = vmx_segment_access_rights(&var);
|
|
|
|
|
|
if (var.base != (var.selector << 4))
|
|
if (var.base != (var.selector << 4))
|
|
return false;
|
|
return false;
|
|
if (var.limit < 0xffff)
|
|
if (var.limit < 0xffff)
|
|
return false;
|
|
return false;
|
|
- if (((ar | (3 << AR_DPL_SHIFT)) & ~(AR_G_MASK | AR_DB_MASK)) != 0xf3)
|
|
|
|
|
|
+ if (ar != 0xf3)
|
|
return false;
|
|
return false;
|
|
|
|
|
|
return true;
|
|
return true;
|