VirtualBox

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


Ignore:
Timestamp:
Feb 8, 2022 11:26:14 AM (3 years ago)
Author:
vboxsync
Message:

VMM/PDMDriver,DrvIntNet,DrvNetShaper: Properly disable all ring-0 driver stuff. bugref:10094

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/PDMDriver.cpp

    r93628 r93652  
    704704                size_t cb = RT_UOFFSETOF_DYN(PDMDRVINS, achInstanceData[pDrv->pReg->cbInstance]);
    705705                cb = RT_ALIGN_Z(cb, 16);
     706                PPDMDRVINS pNew;
     707#undef PDM_WITH_RING0_DRIVERS
     708#ifdef PDM_WITH_RING0_DRIVERS
    706709                bool const fHyperHeap = !!(pDrv->pReg->fFlags & (PDM_DRVREG_FLAGS_R0 | PDM_DRVREG_FLAGS_RC));
    707                 PPDMDRVINS pNew;
    708710                if (fHyperHeap)
    709711                    rc = MMHyperAlloc(pVM, cb, 64, MM_TAG_PDM_DRIVER, (void **)&pNew);
    710712                else
     713#endif
    711714                    rc = MMR3HeapAllocZEx(pVM, MM_TAG_PDM_DRIVER, cb, (void **)&pNew);
    712715                if (RT_SUCCESS(rc))
     
    722725                    pNew->Internal.s.pDrv           = pDrv;
    723726                    pNew->Internal.s.pVMR3          = pVM;
     727#ifdef PDM_WITH_RING0_DRIVERS
    724728                    pNew->Internal.s.pVMR0          = pDrv->pReg->fFlags & PDM_DRVREG_FLAGS_R0 ? pVM->pVMR0ForCall : NIL_RTR0PTR;
    725729                    pNew->Internal.s.pVMRC          = pDrv->pReg->fFlags & PDM_DRVREG_FLAGS_RC ? pVM->pVMRC : NIL_RTRCPTR;
     730#endif
    726731                    //pNew->Internal.s.fDetaching     = false;
    727732                    pNew->Internal.s.fVMSuspended   = true; /** @todo should be 'false', if driver is attached at runtime. */
    728733                    //pNew->Internal.s.fVMReset       = false;
     734#ifdef PDM_WITH_RING0_DRIVERS
    729735                    pNew->Internal.s.fHyperHeap     = fHyperHeap;
     736#endif
    730737                    //pNew->Internal.s.pfnAsyncNotify = NULL;
    731738                    pNew->Internal.s.pCfgHandle     = pNode;
     
    740747                    pNew->pHlpR3                    = &g_pdmR3DrvHlp;
    741748                    pNew->pvInstanceDataR3          = &pNew->achInstanceData[0];
     749#ifdef PDM_WITH_RING0_DRIVERS
    742750                    if (pDrv->pReg->fFlags & PDM_DRVREG_FLAGS_R0)
    743751                    {
     
    746754                        AssertReleaseRCReturn(rc, rc);
    747755                    }
    748 #ifdef VBOX_WITH_RAW_MODE_KEEP
     756# ifdef VBOX_WITH_RAW_MODE_KEEP
    749757                    if (   (pDrv->pReg->fFlags & PDM_DRVREG_FLAGS_RC)
    750758                        && VM_IS_RAW_MODE_ENABLED(pVM))
     
    754762                        AssertReleaseRCReturn(rc, rc);
    755763                    }
     764# endif
    756765#endif
    757766
     
    9961005
    9971006        /* Finally, the driver it self. */
    998         bool fHyperHeap = pCur->Internal.s.fHyperHeap;
     1007#ifdef PDM_WITH_RING0_DRIVERS
     1008        bool const fHyperHeap = pCur->Internal.s.fHyperHeap;
     1009#endif
    9991010        ASMMemFill32(pCur, RT_UOFFSETOF_DYN(PDMDRVINS, achInstanceData[pCur->pReg->cbInstance]), 0xdeadd0d0);
     1011#ifdef PDM_WITH_RING0_DRIVERS
    10001012        if (fHyperHeap)
    10011013            MMHyperFree(pVM, pCur);
    10021014        else
     1015#endif
    10031016            MMR3HeapFree(pCur);
    10041017
     
    13391352        AssertReturn(!(fFlags & TMTIMER_FLAGS_NO_RING0), VERR_INVALID_FLAGS);
    13401353        Assert(pDrvIns->Internal.s.pDrv->pReg->fFlags & PDM_DRVREG_FLAGS_R0);
    1341         /* if (!(pDrvIns->Internal.s.fIntFlags & PDMDRVINSINT_FLAGS_R0_ENABLED)) */ /** @todo PDMDRVINSINT_FLAGS_R0_ENABLED? */
     1354#ifdef PDM_WITH_RING0_DRIVERS
     1355        if (!(pDrvIns->Internal.s.fIntFlags & PDMDRVINSINT_FLAGS_R0_ENABLED)) /** @todo PDMDRVINSINT_FLAGS_R0_ENABLED? */
     1356#endif
    13421357            fFlags = (fFlags & ~TMTIMER_FLAGS_RING0) | TMTIMER_FLAGS_NO_RING0;
    13431358    }
     
    17431758    {
    17441759        if (pDrvIns->pReg->fFlags & PDM_DRVREG_FLAGS_RC)
     1760#ifdef PDM_WITH_RING0_DRIVERS
    17451761            rc = PDMR3LdrGetInterfaceSymbols(pDrvIns->Internal.s.pVMR3,
    17461762                                             pvInterface, cbInterface,
     
    17481764                                             pszSymPrefix, pszSymList,
    17491765                                             false /*fRing0OrRC*/);
     1766#else
     1767        {
     1768            AssertLogRelMsgFailed(("ring-0 drivers are not supported in this VBox version!\n"));
     1769            rc = VERR_NOT_SUPPORTED;
     1770        }
     1771#endif
    17501772        else
    17511773        {
     
    17811803    {
    17821804        if (pDrvIns->pReg->fFlags & PDM_DRVREG_FLAGS_R0)
     1805#ifdef PDM_WITH_RING0_DRIVERS
    17831806            rc = PDMR3LdrGetInterfaceSymbols(pDrvIns->Internal.s.pVMR3,
    17841807                                             pvInterface, cbInterface,
     
    17861809                                             pszSymPrefix, pszSymList,
    17871810                                             true /*fRing0OrRC*/);
     1811#else
     1812        {
     1813            AssertLogRelMsgFailed(("ring-0 drivers are not supported in this VBox version!\n"));
     1814            rc = VERR_NOT_SUPPORTED;
     1815        }
     1816#endif
    17881817        else
    17891818        {
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