VirtualBox

Changeset 45590 in vbox for trunk/src


Ignore:
Timestamp:
Apr 17, 2013 4:31:27 PM (12 years ago)
Author:
vboxsync
Message:

VMMR0/HMVMXR0: reflect #DE and others back to the guest on a vectoring #PF. This case is not covered by the Intel manuals.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp

    r45585 r45590  
    47114711        if (uIntType == VMX_IDT_VECTORING_INFO_TYPE_HW_XCPT)
    47124712        {
    4713             if (   hmR0VmxIsBenignXcpt(uIdtVector)
    4714                 || hmR0VmxIsBenignXcpt(uExitVector))
    4715             {
    4716                 enmReflect = VMXREFLECTXCPT_XCPT;
    4717             }
    4718             else if (   hmR0VmxIsContributoryXcpt(uIdtVector)
     4713            enmReflect = VMXREFLECTXCPT_XCPT;
     4714            if (   hmR0VmxIsContributoryXcpt(uIdtVector)
    47194715                     && uExitVector == X86_XCPT_PF)
    47204716            {
    4721                 enmReflect = VMXREFLECTXCPT_XCPT;
    47224717                GCPtrFaultAddress = pMixedCtx->cr2;
    47234718                Log(("IDT: Contributory #PF uCR2=%#RGv\n", pMixedCtx->cr2));
     
    47274722            {
    47284723                pVmxTransient->fVectoringPF = true;
    4729                 enmReflect = VMXREFLECTXCPT_XCPT;
    47304724                GCPtrFaultAddress = pMixedCtx->cr2;
    47314725                Log(("IDT: Vectoring #PF uCR2=%#RGv\n", pMixedCtx->cr2));
     
    47404734            else if (uIdtVector == X86_XCPT_DF)
    47414735                enmReflect = VMXREFLECTXCPT_TF;
    4742             else
    4743                 AssertMsgFailed(("Invalid!\n"));
    47444736        }
    47454737        else if (   uIntType != VMX_IDT_VECTORING_INFO_TYPE_SW_INT
     
    52385230
    52395231    rc |= VMXReadVmcs32(idxAccess, &u32Val);
    5240     pSelReg->Attr.u  = u32Val;
     5232    pSelReg->Attr.u = u32Val;
    52415233    AssertRCReturn(rc, rc);
    52425234
     
    76617653            && pMixedCtx->ecx <= MSR_IA32_X2APIC_END)
    76627654        {
     7655            Assert(pVCpu->hm.s.vmx.fUpdatedGuestState & VMX_UPDATED_GUEST_APIC_STATE);
    76637656            pVCpu->hm.s.fContextUseFlags |= HM_CHANGED_VMX_GUEST_APIC_STATE;
    76647657        }
     
    83208313    PVM pVM = pVCpu->CTX_SUFF(pVM);
    83218314    VBOXSTRICTRC rc2 = PGMR0Trap0eHandlerNPMisconfig(pVM, pVCpu, PGMMODE_EPT, CPUMCTX2CORE(pMixedCtx), GCPhys, UINT32_MAX);
     8315    rc = VBOXSTRICTRC_VAL(rc2);
    83228316    Log(("EPT misconfig at %#RX64 RIP=%#RX64 rc=%d\n", GCPhys, pMixedCtx->rip, rc));
    8323     rc = VBOXSTRICTRC_VAL(rc2);
    83248317    if (   rc == VINF_SUCCESS
    83258318        || rc == VERR_PAGE_TABLE_NOT_PRESENT
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette