VirtualBox

Changeset 91921 in vbox for trunk/src/VBox/VMM/VMMR3


Ignore:
Timestamp:
Oct 21, 2021 7:41:36 AM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
147726
Message:

VMM,Devices: Eliminate direct calls to PGMR3SharedModule* APIs and introduce callbacks in the device helper callback table, bugref:10074

File:
1 edited

Legend:

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

    r91920 r91921  
    974974    Log(("pdmR3DevHlp_PhysIsGCPhysNormal: caller='%s'/%d: returns %RTbool\n", pDevIns->pReg->szName, pDevIns->iInstance, fNormal));
    975975    return fNormal;
     976}
     977
     978
     979/** @interface_method_impl{PDMDEVHLPR3,pfnPhysChangeMemBalloon} */
     980static DECLCALLBACK(int) pdmR3DevHlp_PhysChangeMemBalloon(PPDMDEVINS pDevIns, bool fInflate, unsigned cPages, RTGCPHYS *paPhysPage)
     981{
     982    PDMDEV_ASSERT_DEVINS(pDevIns);
     983    LogFlow(("pdmR3DevHlp_PhysChangeMemBalloon: caller='%s'/%d: fInflate=%RTbool cPages=%u paPhysPage=%p\n",
     984             pDevIns->pReg->szName, pDevIns->iInstance, fInflate, cPages, paPhysPage));
     985
     986    int rc = PGMR3PhysChangeMemBalloon(pDevIns->Internal.s.pVMR3, fInflate, cPages, paPhysPage);
     987
     988    Log(("pdmR3DevHlp_PhysChangeMemBalloon: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
     989    return rc;
    976990}
    977991
     
    43564370static DECLCALLBACK(int) pdmR3DevHlp_VMMRegisterPatchMemory(PPDMDEVINS pDevIns, RTGCPTR GCPtrPatchMem, uint32_t cbPatchMem)
    43574371{
    4358     PDMDEV_ASSERT_DEVINS(pDevIns); RT_NOREF(pDevIns);
     4372    PDMDEV_ASSERT_DEVINS(pDevIns);
    43594373
    43604374    LogFlow(("pdmR3DevHlp_VMMRegisterPatchMemory: caller='%s'/%d: GCPtrPatchMem=%RGv cbPatchMem=%RU32\n",
     
    43714385static DECLCALLBACK(int) pdmR3DevHlp_VMMDeregisterPatchMemory(PPDMDEVINS pDevIns, RTGCPTR GCPtrPatchMem, uint32_t cbPatchMem)
    43724386{
    4373     PDMDEV_ASSERT_DEVINS(pDevIns); RT_NOREF(pDevIns);
     4387    PDMDEV_ASSERT_DEVINS(pDevIns);
    43744388
    43754389    LogFlow(("pdmR3DevHlp_VMMDeregisterPatchMemory: caller='%s'/%d: GCPtrPatchMem=%RGv cbPatchMem=%RU32\n",
     
    43794393
    43804394    LogFlow(("pdmR3DevHlp_VMMDeregisterPatchMemory: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
     4395    return rc;
     4396}
     4397
     4398
     4399/** @interface_method_impl{PDMDEVHLPR3,pfnSharedModuleRegister} */
     4400static DECLCALLBACK(int) pdmR3DevHlp_SharedModuleRegister(PPDMDEVINS pDevIns, VBOXOSFAMILY enmGuestOS, char *pszModuleName, char *pszVersion,
     4401                                                          RTGCPTR GCBaseAddr, uint32_t cbModule,
     4402                                                          uint32_t cRegions, VMMDEVSHAREDREGIONDESC const *paRegions)
     4403{
     4404    PDMDEV_ASSERT_DEVINS(pDevIns);
     4405
     4406    LogFlow(("pdmR3DevHlp_SharedModuleRegister: caller='%s'/%d: enmGuestOS=%u pszModuleName=%p:{%s} pszVersion=%p:{%s} GCBaseAddr=%RGv cbModule=%#x cRegions=%u paRegions=%p\n",
     4407             pDevIns->pReg->szName, pDevIns->iInstance, enmGuestOS, pszModuleName, pszVersion, GCBaseAddr, cbModule, cRegions, paRegions));
     4408
     4409    int rc = PGMR3SharedModuleRegister(pDevIns->Internal.s.pVMR3, enmGuestOS, pszModuleName, pszVersion,
     4410                                       GCBaseAddr, cbModule, cRegions, paRegions);
     4411
     4412    LogFlow(("pdmR3DevHlp_SharedModuleRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
     4413    return rc;
     4414}
     4415
     4416
     4417/** @interface_method_impl{PDMDEVHLPR3,pfnSharedModuleUnregister} */
     4418static DECLCALLBACK(int) pdmR3DevHlp_SharedModuleUnregister(PPDMDEVINS pDevIns, char *pszModuleName, char *pszVersion,
     4419                                                            RTGCPTR GCBaseAddr, uint32_t cbModule)
     4420{
     4421    PDMDEV_ASSERT_DEVINS(pDevIns);
     4422
     4423    LogFlow(("pdmR3DevHlp_SharedModuleUnregister: caller='%s'/%d: enmGuestOS=%u pszModuleName=%p:{%s} pszVersion=%p:{%s} GCBaseAddr=%RGv cbModule=%#x\n",
     4424             pDevIns->pReg->szName, pDevIns->iInstance, pszModuleName, pszVersion, GCBaseAddr, cbModule));
     4425
     4426    int rc = PGMR3SharedModuleUnregister(pDevIns->Internal.s.pVMR3, pszModuleName, pszVersion, GCBaseAddr, cbModule);
     4427
     4428    LogFlow(("pdmR3DevHlp_SharedModuleUnregister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
     4429    return rc;
     4430}
     4431
     4432
     4433/** @interface_method_impl{PDMDEVHLPR3,pfnSharedModuleGetPageState} */
     4434static DECLCALLBACK(int) pdmR3DevHlp_SharedModuleGetPageState(PPDMDEVINS pDevIns, RTGCPTR GCPtrPage, bool *pfShared, uint64_t *pfPageFlags)
     4435{
     4436    PDMDEV_ASSERT_DEVINS(pDevIns);
     4437
     4438    LogFlow(("pdmR3DevHlp_SharedModuleGetPageState: caller='%s'/%d: GCPtrPage=%RGv pfShared=%p pfPageFlags=%p\n",
     4439             pDevIns->pReg->szName, pDevIns->iInstance, GCPtrPage, pfShared, pfPageFlags));
     4440
     4441#ifdef DEBUG
     4442    int rc = PGMR3SharedModuleGetPageState(PDMDevHlpGetVM(pDevIns), GCPtrPage, pfShared, pfPageFlags);
     4443#else
     4444    int rc = VERR_NOT_IMPLEMENTED;
     4445#endif
     4446
     4447    LogFlow(("pdmR3DevHlp_SharedModuleGetPageState: caller='%s'/%d: returns %Rrc *pfShared=%RTbool *pfPageFlags=%#RX64\n",
     4448             pDevIns->pReg->szName, pDevIns->iInstance, rc, *pfShared, *pfPageFlags));
     4449    return rc;
     4450}
     4451
     4452
     4453/** @interface_method_impl{PDMDEVHLPR3,pfnSharedModuleCheckAll} */
     4454static DECLCALLBACK(int) pdmR3DevHlp_SharedModuleCheckAll(PPDMDEVINS pDevIns)
     4455{
     4456    PDMDEV_ASSERT_DEVINS(pDevIns);
     4457
     4458    LogFlow(("pdmR3DevHlp_SharedModuleCheckAll: caller='%s'/%d:\n", pDevIns->pReg->szName, pDevIns->iInstance));
     4459
     4460    int rc = PGMR3SharedModuleCheckAll(pDevIns->Internal.s.pVMR3);
     4461
     4462    LogFlow(("pdmR3DevHlp_SharedModuleCheckAll: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
    43814463    return rc;
    43824464}
     
    45844666    pdmR3DevHlp_PhysGCPtr2GCPhys,
    45854667    pdmR3DevHlp_PhysIsGCPhysNormal,
     4668    pdmR3DevHlp_PhysChangeMemBalloon,
    45864669    pdmR3DevHlp_MMHeapAlloc,
    45874670    pdmR3DevHlp_MMHeapAllocZ,
     
    47484831    pdmR3DevHlp_VMMRegisterPatchMemory,
    47494832    pdmR3DevHlp_VMMDeregisterPatchMemory,
     4833    pdmR3DevHlp_SharedModuleRegister,
     4834    pdmR3DevHlp_SharedModuleUnregister,
     4835    pdmR3DevHlp_SharedModuleGetPageState,
     4836    pdmR3DevHlp_SharedModuleCheckAll,
    47504837    PDM_DEVHLPR3_VERSION /* the end */
    47514838};
     
    49545041    pdmR3DevHlp_PhysGCPtr2GCPhys,
    49555042    pdmR3DevHlp_PhysIsGCPhysNormal,
     5043    pdmR3DevHlp_PhysChangeMemBalloon,
    49565044    pdmR3DevHlp_MMHeapAlloc,
    49575045    pdmR3DevHlp_MMHeapAllocZ,
     
    51185206    pdmR3DevHlp_VMMRegisterPatchMemory,
    51195207    pdmR3DevHlp_VMMDeregisterPatchMemory,
     5208    pdmR3DevHlp_SharedModuleRegister,
     5209    pdmR3DevHlp_SharedModuleUnregister,
     5210    pdmR3DevHlp_SharedModuleGetPageState,
     5211    pdmR3DevHlp_SharedModuleCheckAll,
    51205212    PDM_DEVHLPR3_VERSION /* the end */
    51215213};
     
    52965388    PDMDEV_ASSERT_DEVINS(pDevIns);
    52975389    RT_NOREF(GCPtrPatchMem, cbPatchMem);
     5390    AssertReleaseMsgFailed(("Untrusted device called trusted helper! '%s'/%d\n",
     5391                            pDevIns->pReg->szName, pDevIns->iInstance));
     5392    return VERR_ACCESS_DENIED;
     5393}
     5394
     5395
     5396/** @interface_method_impl{PDMDEVHLPR3,pfnSharedModuleRegister} */
     5397static DECLCALLBACK(int) pdmR3DevHlp_Untrusted_SharedModuleRegister(PPDMDEVINS pDevIns, VBOXOSFAMILY enmGuestOS, char *pszModuleName, char *pszVersion,
     5398                                                                    RTGCPTR GCBaseAddr, uint32_t cbModule,
     5399                                                                    uint32_t cRegions, VMMDEVSHAREDREGIONDESC const *paRegions)
     5400{
     5401    PDMDEV_ASSERT_DEVINS(pDevIns);
     5402    RT_NOREF(enmGuestOS, pszModuleName, pszVersion, GCBaseAddr, cbModule, cRegions, paRegions);
     5403    AssertReleaseMsgFailed(("Untrusted device called trusted helper! '%s'/%d\n",
     5404                            pDevIns->pReg->szName, pDevIns->iInstance));
     5405    return VERR_ACCESS_DENIED;
     5406}
     5407
     5408
     5409/** @interface_method_impl{PDMDEVHLPR3,pfnSharedModuleUnregister} */
     5410static DECLCALLBACK(int) pdmR3DevHlp_Untrusted_SharedModuleUnregister(PPDMDEVINS pDevIns, char *pszModuleName, char *pszVersion,
     5411                                                                      RTGCPTR GCBaseAddr, uint32_t cbModule)
     5412{
     5413    PDMDEV_ASSERT_DEVINS(pDevIns);
     5414    RT_NOREF(pszModuleName, pszVersion, GCBaseAddr, cbModule);
     5415    AssertReleaseMsgFailed(("Untrusted device called trusted helper! '%s'/%d\n",
     5416                            pDevIns->pReg->szName, pDevIns->iInstance));
     5417    return VERR_ACCESS_DENIED;
     5418}
     5419
     5420
     5421/** @interface_method_impl{PDMDEVHLPR3,pfnSharedModuleGetPageState} */
     5422static DECLCALLBACK(int) pdmR3DevHlp_Untrusted_SharedModuleGetPageState(PPDMDEVINS pDevIns, RTGCPTR GCPtrPage, bool *pfShared, uint64_t *pfPageFlags)
     5423{
     5424    PDMDEV_ASSERT_DEVINS(pDevIns);
     5425    RT_NOREF(GCPtrPage, pfShared, pfPageFlags);
     5426    AssertReleaseMsgFailed(("Untrusted device called trusted helper! '%s'/%d\n",
     5427                            pDevIns->pReg->szName, pDevIns->iInstance));
     5428    return VERR_ACCESS_DENIED;
     5429}
     5430
     5431
     5432/** @interface_method_impl{PDMDEVHLPR3,pfnSharedModuleCheckAll} */
     5433static DECLCALLBACK(int) pdmR3DevHlp_Untrusted_SharedModuleCheckAll(PPDMDEVINS pDevIns)
     5434{
     5435    PDMDEV_ASSERT_DEVINS(pDevIns);
    52985436    AssertReleaseMsgFailed(("Untrusted device called trusted helper! '%s'/%d\n",
    52995437                            pDevIns->pReg->szName, pDevIns->iInstance));
     
    55035641    pdmR3DevHlp_PhysGCPtr2GCPhys,
    55045642    pdmR3DevHlp_PhysIsGCPhysNormal,
     5643    pdmR3DevHlp_PhysChangeMemBalloon,
    55055644    pdmR3DevHlp_MMHeapAlloc,
    55065645    pdmR3DevHlp_MMHeapAllocZ,
     
    56675806    pdmR3DevHlp_Untrusted_VMMRegisterPatchMemory,
    56685807    pdmR3DevHlp_Untrusted_VMMDeregisterPatchMemory,
     5808    pdmR3DevHlp_Untrusted_SharedModuleRegister,
     5809    pdmR3DevHlp_Untrusted_SharedModuleUnregister,
     5810    pdmR3DevHlp_Untrusted_SharedModuleGetPageState,
     5811    pdmR3DevHlp_Untrusted_SharedModuleCheckAll,
    56695812    PDM_DEVHLPR3_VERSION /* the end */
    56705813};
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