VirtualBox

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


Ignore:
Timestamp:
Dec 8, 2017 6:29:12 AM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
119526
Message:

VMM/HMSVMR0: Always intercept SMI.

File:
1 edited

Legend:

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

    r70000 r70002  
    137137#define HMSVM_MANDATORY_GUEST_CTRL_INTERCEPTS           (  SVM_CTRL_INTERCEPT_INTR        \
    138138                                                         | SVM_CTRL_INTERCEPT_NMI         \
     139                                                         | SVM_CTRL_INTERCEPT_SMI         \
    139140                                                         | SVM_CTRL_INTERCEPT_INIT        \
    140141                                                         | SVM_CTRL_INTERCEPT_RDPMC       \
     
    158159                                                         | SVM_CTRL_INTERCEPT_MWAIT       \
    159160                                                         | SVM_CTRL_INTERCEPT_XSETBV)
    160 
    161 /**
    162  *  Mandatory/unconditional nested-guest control intercepts.
    163  */
    164 #define HMSVM_MANDATORY_NESTED_GUEST_CTRL_INTERCEPTS    (  HMSVM_MANDATORY_GUEST_CTRL_INTERCEPTS \
    165                                                          | SVM_CTRL_INTERCEPT_SMI)
    166161
    167162/** @name VMCB Clean Bits.
     
    19081903        pVmcbNstGst->ctrl.u32InterceptXcpt  |= pVmcb->ctrl.u32InterceptXcpt;
    19091904        pVmcbNstGst->ctrl.u64InterceptCtrl  |= pVmcb->ctrl.u64InterceptCtrl
    1910                                             |  HMSVM_MANDATORY_NESTED_GUEST_CTRL_INTERCEPTS;
     1905                                            |  HMSVM_MANDATORY_GUEST_CTRL_INTERCEPTS;
    19111906
    19121907        /*
     
    32213216         * the guest's PIC/APIC).
    32223217         *
    3223          * External intercepts from the physical CPU are -always- intercepted when
    3224          * executing using hardware-assisted SVM, see HMSVM_MANDATORY_NESTED_GUEST_CTRL_INTERCEPTS.
     3218         * External intercepts, NMI, SMI etc. from the physical CPU are -always- intercepted
     3219         * when executing using hardware-assisted SVM, see HMSVM_MANDATORY_GUEST_CTRL_INTERCEPTS.
    32253220         *
    32263221         * External interrupts that are generated for the outer guest may be intercepted
     
    49234918
    49244919        case SVM_EXIT_INTR:
    4925         {
    4926             /* We shouldn't direct physical interrupts to the nested-guest. */
    4927             return hmR0SvmExitIntr(pVCpu, pCtx, pSvmTransient);
    4928         }
    4929 
    49304920        case SVM_EXIT_FERR_FREEZE:
    4931         {
    4932             if (HMIsGuestSvmCtrlInterceptSet(pVCpu, pCtx, SVM_CTRL_INTERCEPT_FERR_FREEZE))
    4933                 return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
    4934             return hmR0SvmExitIntr(pVCpu, pCtx, pSvmTransient);
    4935         }
    4936 
    49374921        case SVM_EXIT_NMI:
    49384922        {
    4939             if (HMIsGuestSvmCtrlInterceptSet(pVCpu, pCtx, SVM_CTRL_INTERCEPT_NMI))
    4940                 return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
     4923            /* We shouldn't direct physical interrupts, NMI, FERR to the nested-guest. */
    49414924            return hmR0SvmExitIntr(pVCpu, pCtx, pSvmTransient);
    49424925        }
     
    52825265                {
    52835266                    /*
    5284                      * We don't intercept SMIs. As for INIT signals, it really shouldn't ever happen here.
     5267                     * INIT signals, SMI shouldn't ever happen here.
    52855268                     * If it ever does, we want to know about it so log the exit code and bail.
    52865269                     */
     
    72417224        {
    72427225            /* Convert a #MF into a FERR -> IRQ 13. See @bugref{6117}. */
     7226            /** @todo FERR intercept when in nested-guest mode?   */
    72437227            rc = PDMIsaSetIrq(pVCpu->CTX_SUFF(pVM), 13, 1, 0 /* uTagSrc */);
    72447228            if (RT_SUCCESS(rc))
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