Changeset 47676 in vbox for trunk/src/VBox
- Timestamp:
- Aug 12, 2013 3:17:36 PM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r47673 r47676 7598 7598 * Segment registers. 7599 7599 */ 7600 HMVMX_CHECK_BREAK(!(pCtx->tr.Sel & X86_SEL_LDT), VMX_IGS_TR_TI_INVALID); 7601 HMVMX_CHECK_BREAK( (pCtx->ldtr.Attr.u & X86DESCATTR_UNUSABLE) 7602 || !(pCtx->ldtr.Sel & X86_SEL_LDT), VMX_IGS_LDTR_TI_INVALID); 7600 7603 if ( !pVM->hm.s.vmx.fUnrestrictedGuest 7601 7604 && ( !CPUMIsGuestInRealModeEx(pCtx) … … 7627 7630 HMVMX_CHECK_BREAK(!pCtx->ss.Attr.n.u2Dpl, VMX_IGS_SS_ATTR_DPL_INVALID); 7628 7631 } 7629 if ( pCtx->ss.Attr.u &&!(pCtx->ss.Attr.u & X86DESCATTR_UNUSABLE))7632 if (!(pCtx->ss.Attr.u & X86DESCATTR_UNUSABLE)) 7630 7633 { 7631 7634 HMVMX_CHECK_BREAK(pCtx->ss.Attr.n.u4Type == 3 || pCtx->ss.Attr.n.u4Type == 7, VMX_IGS_SS_ATTR_TYPE_INVALID); … … 7639 7642 } 7640 7643 /* DS, ES, FS, GS - only check for usable selectors, see hmR0VmxWriteSegmentReg(). */ 7641 if ( pCtx->ds.Attr.u &&!(pCtx->ds.Attr.u & X86DESCATTR_UNUSABLE))7644 if (!(pCtx->ds.Attr.u & X86DESCATTR_UNUSABLE)) 7642 7645 { 7643 7646 HMVMX_CHECK_BREAK(pCtx->ds.Attr.n.u4Type & X86_SEL_TYPE_ACCESSED, VMX_IGS_DS_ATTR_A_INVALID); … … 7654 7657 || (pCtx->ds.Attr.n.u4Type & X86_SEL_TYPE_READ), VMX_IGS_DS_ATTR_TYPE_INVALID); 7655 7658 } 7656 if ( pCtx->es.Attr.u &&!(pCtx->es.Attr.u & X86DESCATTR_UNUSABLE))7659 if (!(pCtx->es.Attr.u & X86DESCATTR_UNUSABLE)) 7657 7660 { 7658 7661 HMVMX_CHECK_BREAK(pCtx->es.Attr.n.u4Type & X86_SEL_TYPE_ACCESSED, VMX_IGS_ES_ATTR_A_INVALID); … … 7669 7672 || (pCtx->es.Attr.n.u4Type & X86_SEL_TYPE_READ), VMX_IGS_ES_ATTR_TYPE_INVALID); 7670 7673 } 7671 if ( pCtx->fs.Attr.u &&!(pCtx->fs.Attr.u & X86DESCATTR_UNUSABLE))7674 if (!(pCtx->fs.Attr.u & X86DESCATTR_UNUSABLE)) 7672 7675 { 7673 7676 HMVMX_CHECK_BREAK(pCtx->fs.Attr.n.u4Type & X86_SEL_TYPE_ACCESSED, VMX_IGS_FS_ATTR_A_INVALID); … … 7684 7687 || (pCtx->fs.Attr.n.u4Type & X86_SEL_TYPE_READ), VMX_IGS_FS_ATTR_TYPE_INVALID); 7685 7688 } 7686 if ( pCtx->gs.Attr.u &&!(pCtx->gs.Attr.u & X86DESCATTR_UNUSABLE))7689 if (!(pCtx->gs.Attr.u & X86DESCATTR_UNUSABLE)) 7687 7690 { 7688 7691 HMVMX_CHECK_BREAK(pCtx->gs.Attr.n.u4Type & X86_SEL_TYPE_ACCESSED, VMX_IGS_GS_ATTR_A_INVALID); … … 7703 7706 if (HMVMX_IS_64BIT_HOST_MODE()) 7704 7707 { 7708 HMVMX_CHECK_BREAK(HMVMX_IS_CANONICAL(pCtx->tr.u64Base), VMX_IGS_TR_BASE_NOT_CANONICAL); 7709 HMVMX_CHECK_BREAK(HMVMX_IS_CANONICAL(pCtx->fs.u64Base), VMX_IGS_FS_BASE_NOT_CANONICAL); 7710 HMVMX_CHECK_BREAK(HMVMX_IS_CANONICAL(pCtx->gs.u64Base), VMX_IGS_GS_BASE_NOT_CANONICAL); 7711 HMVMX_CHECK_BREAK( (pCtx->ldtr.Attr.u & X86DESCATTR_UNUSABLE) 7712 || HMVMX_IS_CANONICAL(pCtx->ldtr.u64Base), VMX_IGS_LDTR_BASE_NOT_CANONICAL); 7705 7713 HMVMX_CHECK_BREAK(!(pCtx->cs.u64Base >> 32), VMX_IGS_LONGMODE_CS_BASE_INVALID); 7706 7714 HMVMX_CHECK_BREAK((pCtx->ss.Attr.u & X86DESCATTR_UNUSABLE) || !(pCtx->ss.u64Base >> 32), … … 7760 7768 if (HMVMX_IS_64BIT_HOST_MODE()) 7761 7769 { 7770 HMVMX_CHECK_BREAK(HMVMX_IS_CANONICAL(pCtx->tr.u64Base), VMX_IGS_TR_BASE_NOT_CANONICAL); 7771 HMVMX_CHECK_BREAK(HMVMX_IS_CANONICAL(pCtx->fs.u64Base), VMX_IGS_FS_BASE_NOT_CANONICAL); 7772 HMVMX_CHECK_BREAK(HMVMX_IS_CANONICAL(pCtx->gs.u64Base), VMX_IGS_GS_BASE_NOT_CANONICAL); 7773 HMVMX_CHECK_BREAK( (pCtx->ldtr.Attr.u & X86DESCATTR_UNUSABLE) 7774 || HMVMX_IS_CANONICAL(pCtx->ldtr.u64Base), VMX_IGS_LDTR_BASE_NOT_CANONICAL); 7762 7775 HMVMX_CHECK_BREAK(!(pCtx->cs.u64Base >> 32), VMX_IGS_LONGMODE_CS_BASE_INVALID); 7763 7776 HMVMX_CHECK_BREAK((pCtx->ss.Attr.u & X86DESCATTR_UNUSABLE) || !(pCtx->ss.u64Base >> 32),
Note:
See TracChangeset
for help on using the changeset viewer.