VirtualBox

Changeset 82577 in vbox for trunk/src/VBox/VMM/VMMR0


Ignore:
Timestamp:
Dec 13, 2019 11:22:58 AM (5 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
135455
Message:

CPUMR0InitVM: Make sure MSR_IA32_ARCH_CAP_F_IBRS_ALL only is set when X86_CPUID_STEXT_FEATURE_EDX_IBRS_IBPB is also set. ticketref:19146

File:
1 edited

Legend:

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

    r81605 r82577  
    270270         * Copy MSR_IA32_ARCH_CAPABILITIES bits over into the host and guest feature
    271271         * structure and as well as the guest MSR.
     272         * Note! we assume this happens after the CPUMR3Init is done, so CPUID bits are settled.
    272273         */
    273274        pVM->cpum.s.HostFeatures.fArchRdclNo             = 0;
     
    284285                && (fFeatures & X86_CPUID_FEATURE_EDX_MSR))
    285286            {
    286                 uint64_t const fArchVal = ASMRdMsr(MSR_IA32_ARCH_CAPABILITIES);
    287                 pVM->cpum.s.GuestFeatures.fArchRdclNo
    288                     = pVM->cpum.s.HostFeatures.fArchRdclNo             = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_RDCL_NO);
    289                 pVM->cpum.s.GuestFeatures.fArchIbrsAll
    290                     = pVM->cpum.s.HostFeatures.fArchIbrsAll            = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_IBRS_ALL);
    291                 pVM->cpum.s.GuestFeatures.fArchRsbOverride
    292                     = pVM->cpum.s.HostFeatures.fArchRsbOverride        = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_RSBO);
    293                 pVM->cpum.s.GuestFeatures.fArchVmmNeedNotFlushL1d
    294                     = pVM->cpum.s.HostFeatures.fArchVmmNeedNotFlushL1d = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_VMM_NEED_NOT_FLUSH_L1D);
    295                 pVM->cpum.s.GuestFeatures.fArchMdsNo
    296                     = pVM->cpum.s.HostFeatures.fArchMdsNo              = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_MDS_NO);
    297 
    298                 if (pVM->cpum.s.GuestFeatures.fArchCap)
    299                     VMCC_FOR_EACH_VMCPU_STMT(pVM, pVCpu->cpum.s.GuestMsrs.msr.ArchCaps = fArchVal);
     287                /* Host: */
     288                uint64_t fArchVal = ASMRdMsr(MSR_IA32_ARCH_CAPABILITIES);
     289                pVM->cpum.s.HostFeatures.fArchRdclNo             = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_RDCL_NO);
     290                pVM->cpum.s.HostFeatures.fArchIbrsAll            = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_IBRS_ALL);
     291                pVM->cpum.s.HostFeatures.fArchRsbOverride        = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_RSBO);
     292                pVM->cpum.s.HostFeatures.fArchVmmNeedNotFlushL1d = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_VMM_NEED_NOT_FLUSH_L1D);
     293                pVM->cpum.s.HostFeatures.fArchMdsNo              = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_MDS_NO);
     294
     295                /* guest: */
     296                if (!pVM->cpum.s.GuestFeatures.fArchCap)
     297                    fArchVal = 0;
     298                else if (!pVM->cpum.s.GuestFeatures.fIbrs)
     299                    fArchVal &= ~MSR_IA32_ARCH_CAP_F_IBRS_ALL;
     300                VMCC_FOR_EACH_VMCPU_STMT(pVM, pVCpu->cpum.s.GuestMsrs.msr.ArchCaps = fArchVal);
     301                pVM->cpum.s.GuestFeatures.fArchRdclNo             = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_RDCL_NO);
     302                pVM->cpum.s.GuestFeatures.fArchIbrsAll            = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_IBRS_ALL);
     303                pVM->cpum.s.GuestFeatures.fArchRsbOverride        = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_RSBO);
     304                pVM->cpum.s.GuestFeatures.fArchVmmNeedNotFlushL1d = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_VMM_NEED_NOT_FLUSH_L1D);
     305                pVM->cpum.s.GuestFeatures.fArchMdsNo              = RT_BOOL(fArchVal & MSR_IA32_ARCH_CAP_F_MDS_NO);
    300306            }
    301307            else
Note: See TracChangeset for help on using the changeset viewer.

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