VirtualBox

Changeset 4079 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
Aug 7, 2007 5:23:40 PM (17 years ago)
Author:
vboxsync
Message:

Fail if the CPU is in VMX root mode.

Location:
trunk/src/VBox/VMM/VMMR0
Files:
2 edited

Legend:

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

    r4071 r4079  
    127127                         */
    128128                        ASMSetCR4(pVM->hwaccm.s.vmx.hostCR4 | X86_CR4_VMXE);
     129                    }
     130
     131                    if (    pVM->hwaccm.s.vmx.pVMXONPhys
     132                        &&  pVM->hwaccm.s.vmx.pVMXON)
     133                    {
     134                        /* Set revision dword at the beginning of the structure. */
     135                        *(uint32_t *)pVM->hwaccm.s.vmx.pVMXON = MSR_IA32_VMX_BASIC_INFO_VMCS_ID(pVM->hwaccm.s.vmx.msr.vmx_basic_info);
     136
     137                        /* Enter VMX Root Mode */
     138                        int rc = VMXEnable(pVM->hwaccm.s.vmx.pVMXONPhys);
     139                        if (VBOX_FAILURE(rc))
     140                        {
     141                            /* KVM leaves the CPU in VMX operation. Not only is this not allowed, it will crash the host when we enter raw mode, because
     142                             * (a) clearing X86_CR4_VMXE in CR4 causes a #GP
     143                             * (b) turning off paging causes a #GP
     144                             *
     145                             * They should fix their code, but until they do we simply refuse to run.
     146                             */
     147                            return VERR_VMX_IN_VMX_ROOT_MODE;
     148                        }
     149                        VMXDisable();
    129150                    }
    130151                }
  • trunk/src/VBox/VMM/VMMR0/VMMR0.cpp

    r4071 r4079  
    174174     * Init VMXM.
    175175     */
    176     HWACCMR0Init(pVM);
     176    int rc = HWACCMR0Init(pVM);
     177    if (VBOX_FAILURE(rc))
     178        return rc;
    177179
    178180    /*
    179181     * Init CPUM.
    180182     */
    181     int rc = CPUMR0Init(pVM);
     183    rc = CPUMR0Init(pVM);
    182184
    183185    if (RT_FAILURE(rc))
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