VirtualBox

Changeset 103374 in vbox


Ignore:
Timestamp:
Feb 14, 2024 10:10:00 PM (10 months ago)
Author:
vboxsync
Message:

VMM/PGM,DBGF,GIC: Parfait pointed out some potential NULL pointer use here and there. bugref:3409

Location:
trunk/src/VBox/VMM
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/GICAll.cpp

    r101062 r103374  
    11261126                VMCPUID idCpu = 0;
    11271127                uint16_t uTgtList = ARMV8_ICC_SGI1R_EL1_AARCH64_TARGET_LIST_GET(u64Value);
     1128                /** @todo rewrite using ASMBitFirstSetU16. */
    11281129                while (uTgtList)
    11291130                {
     
    11311132                    {
    11321133                        PVMCPUCC pVCpuDst = VMMGetCpuById(pVCpu->CTX_SUFF(pVM), idCpu);
    1133                         GICSgiSet(pVCpuDst, uIntId, true /*fAsserted*/);
     1134                        if (pVCpuDst)
     1135                            GICSgiSet(pVCpuDst, uIntId, true /*fAsserted*/);
     1136                        else
     1137                            AssertFailed();
    11341138                    }
    11351139                    uTgtList >>= 1;
  • trunk/src/VBox/VMM/VMMAll/PGMAll.cpp

    r100964 r103374  
    14801480        const unsigned     iPml4  = (GCPtr >> X86_PML4_SHIFT) & X86_PML4_MASK;
    14811481        PX86PML4E          pPml4e = pgmShwGetLongModePML4EPtr(pVCpu, iPml4);
     1482        AssertReturn(pPml4e, VERR_PGM_PML4_MAPPING);
    14821483        X86PGPAEUINT const uPml4e = pPml4e->u;
    14831484
  • trunk/src/VBox/VMM/VMMAll/PGMAllBth.h

    r102075 r103374  
    14201420    const unsigned  iPDDst    = (uint32_t)GCPtrPage >> SHW_PD_SHIFT;
    14211421    PX86PDE         pPdeDst   = pgmShwGet32BitPDEPtr(pVCpu, GCPtrPage);
     1422    AssertReturn(pPdeDst, VERR_INTERNAL_ERROR_3);
    14221423
    14231424    /* Fetch the pgm pool shadow descriptor. */
     
    21372138    const unsigned  iPDDst   = (GCPtrPage >> SHW_PD_SHIFT) & SHW_PD_MASK;
    21382139    PX86PDE         pPdeDst  = pgmShwGet32BitPDEPtr(pVCpu, GCPtrPage);
     2140    AssertReturn(pPdeDst, VERR_INTERNAL_ERROR_3);
    21392141
    21402142    /* Fetch the pgm pool shadow descriptor. */
     
    34033405    const unsigned  iPDDst   = GCPtrPage >> SHW_PD_SHIFT;
    34043406    PSHWPDE         pPdeDst  = pgmShwGet32BitPDEPtr(pVCpu, GCPtrPage);
     3407    AssertReturn(pPdeDst, VERR_INTERNAL_ERROR_3);
    34053408
    34063409    /* Fetch the pgm pool shadow descriptor. */
     
    38013804    const unsigned  iPDDst  = (GCPtrPage >> SHW_PD_SHIFT) & SHW_PD_MASK;
    38023805    PSHWPDE         pPdeDst = pgmShwGet32BitPDEPtr(pVCpu, GCPtrPage);
     3806    AssertReturn(pPdeDst, VERR_INTERNAL_ERROR_3);
    38033807
    38043808    /* Fetch the pgm pool shadow descriptor. */
     
    42104214# if PGM_SHW_TYPE == PGM_TYPE_32BIT
    42114215    PX86PDE         pPdeDst = pgmShwGet32BitPDEPtr(pVCpu, GCPtrPage);
     4216    AssertReturn(pPdeDst, VERR_INTERNAL_ERROR_3);
    42124217
    42134218# elif PGM_SHW_TYPE == PGM_TYPE_PAE
     
    44594464    for (; iPml4 < X86_PG_PAE_ENTRIES; iPml4++)
    44604465    {
    4461         PPGMPOOLPAGE    pShwPdpt = NULL;
    4462         PX86PML4E       pPml4eSrc;
    4463         PX86PML4E       pPml4eDst;
    4464         RTGCPHYS        GCPhysPdptSrc;
    4465 
    4466         pPml4eSrc     = pgmGstGetLongModePML4EPtr(pVCpu, iPml4);
    4467         pPml4eDst     = pgmShwGetLongModePML4EPtr(pVCpu, iPml4);
     4466        PX86PML4E const pPml4eSrc = pgmGstGetLongModePML4EPtr(pVCpu, iPml4);
     4467        AssertContinueStmt(pPml4eSrc, cErrors++);
     4468
     4469        PX86PML4E const pPml4eDst = pgmShwGetLongModePML4EPtr(pVCpu, iPml4);
     4470        AssertContinueStmt(pPml4eDst, cErrors++);
    44684471
    44694472        /* Fetch the pgm pool shadow descriptor if the shadow pml4e is present. */
     
    44744477        }
    44754478
    4476         pShwPdpt = pgmPoolGetPage(pPool, pPml4eDst->u & X86_PML4E_PG_MASK);
    4477         GCPhysPdptSrc = PGM_A20_APPLY(pVCpu, pPml4eSrc->u & X86_PML4E_PG_MASK);
     4479        PPGMPOOLPAGE pShwPdpt = pgmPoolGetPage(pPool, pPml4eDst->u & X86_PML4E_PG_MASK);
     4480        RTGCPHYS GCPhysPdptSrc = PGM_A20_APPLY(pVCpu, pPml4eSrc->u & X86_PML4E_PG_MASK);
    44784481
    44794482        if ((pPml4eSrc->u & X86_PML4E_P) != (pPml4eDst->u & X86_PML4E_P))
  • trunk/src/VBox/VMM/VMMAll/PGMAllHandler.cpp

    r100966 r103374  
    15081508            STAM_COUNTER_INC(&pVM->pgm.s.Stats.CTX_MID_Z(Stat,PhysHandlerReset));
    15091509
    1510             PPGMRAMRANGE pRam = pgmPhysGetRange(pVM, GCPhys);
    1511             Assert(pRam);
    1512             Assert(pRam->GCPhys     <= pCur->Key);
    1513             Assert(pRam->GCPhysLast >= pCur->KeyLast);
     1510#ifdef VBOX_STRICT
     1511            PPGMRAMRANGE const pRamStrict = pgmPhysGetRange(pVM, GCPhys);
     1512            Assert(pRamStrict && pRamStrict->GCPhys     <= pCur->Key);
     1513            Assert(pRamStrict && pRamStrict->GCPhysLast >= pCur->KeyLast);
     1514#endif
    15141515
    15151516            /*
     
    15181519            if (pCur->cTmpOffPages > 0)
    15191520            {
    1520                 rc = pgmHandlerPhysicalSetRamFlagsAndFlushShadowPTs(pVM, pCur, pRam, pvBitmap, offBitmap);
     1521                PPGMRAMRANGE const pRam = pgmPhysGetRange(pVM, GCPhys);
     1522                if (pRam) /* paranoia */
     1523                    rc = pgmHandlerPhysicalSetRamFlagsAndFlushShadowPTs(pVM, pCur, pRam, pvBitmap, offBitmap);
     1524                else
     1525                    AssertFailed();
    15211526                pCur->cTmpOffPages  = 0;
    15221527            }
     
    19141919             * Get and validate the pages.
    19151920             */
    1916             PPGMPAGE pPage;
     1921            PPGMPAGE     pPage = NULL;
     1922#ifdef VBOX_WITH_NATIVE_NEM
     1923            PPGMRAMRANGE pRam  = NULL;
     1924            rc = pgmPhysGetPageAndRangeEx(pVM, GCPhysPage, &pPage, &pRam);
     1925#else
    19171926            rc = pgmPhysGetPageEx(pVM, GCPhysPage, &pPage);
     1927#endif
    19181928            AssertReturnStmt(RT_SUCCESS_NP(rc), PGM_UNLOCK(pVM), rc);
    19191929            if (PGM_PAGE_GET_TYPE(pPage) != PGMPAGETYPE_MMIO)
     
    19541964            if (VM_IS_NEM_ENABLED(pVM))
    19551965            {
    1956                 PPGMRAMRANGE pRam    = pgmPhysGetRange(pVM, GCPhysPage);
    1957                 uint8_t      u2State = PGM_PAGE_GET_NEM_STATE(pPage);
     1966                uint8_t u2State = PGM_PAGE_GET_NEM_STATE(pPage);
    19581967                NEMHCNotifyPhysPageChanged(pVM, GCPhysPage, pVM->pgm.s.HCPhysZeroPg, PGM_PAGE_GET_HCPHYS(pPage),
    19591968                                           PGM_RAMRANGE_CALC_PAGE_R3PTR(pRam, GCPhysPage),
  • trunk/src/VBox/VMM/VMMAll/PGMAllPhys.cpp

    r102663 r103374  
    658658VMMDECL(bool) PGMPhysIsA20Enabled(PVMCPU pVCpu)
    659659{
    660     LogFlow(("PGMPhysIsA20Enabled %d\n", pVCpu->pgm.s.fA20Enabled));
    661     return pVCpu->pgm.s.fA20Enabled;
     660    /* Must check that pVCpu isn't NULL here because PDM device helper are a little lazy. */
     661    LogFlow(("PGMPhysIsA20Enabled %d\n", pVCpu && pVCpu->pgm.s.fA20Enabled));
     662    return pVCpu && pVCpu->pgm.s.fA20Enabled;
    662663}
    663664
  • trunk/src/VBox/VMM/VMMR3/DBGFStack.cpp

    r102559 r103374  
    848848        else
    849849        {
    850             PVMCPU pVCpu = VMMGetCpuById(pUVM->pVM, idCpu);
    851             CPUMMODE enmCpuMode = CPUMGetGuestMode(pVCpu);
     850            PVMCPU const   pVCpu      = pUVM->pVM->apCpusR3[idCpu];
     851            CPUMMODE const enmCpuMode = CPUMGetGuestMode(pVCpu);
    852852            if (enmCpuMode == CPUMMODE_REAL)
    853853            {
     
    10291029    {
    10301030        case DBGFCODETYPE_GUEST:
    1031             pCtx = CPUMQueryGuestCtxPtr(VMMGetCpuById(pVM, idCpu));
     1031            pCtx = CPUMQueryGuestCtxPtr(pVM->apCpusR3[idCpu]);
    10321032            hAs  = DBGF_AS_GLOBAL;
    10331033            break;
    10341034        case DBGFCODETYPE_HYPER:
    1035             pCtx = CPUMQueryGuestCtxPtr(VMMGetCpuById(pVM, idCpu));
     1035            pCtx = CPUMQueryGuestCtxPtr(pVM->apCpusR3[idCpu]);
    10361036            hAs  = DBGF_AS_RC_AND_GC_GLOBAL;
    10371037            break;
  • trunk/src/VBox/VMM/VMMR3/VMM.cpp

    r100101 r103374  
    12961296
    12971297#if defined(VBOX_VMM_TARGET_ARMV8)
     1298
    12981299/**
    12991300 * VCPU worker for VMMR3CpuOn.
     
    13061307static DECLCALLBACK(int) vmmR3CpuOn(PVM pVM, VMCPUID idCpu, RTGCPHYS GCPhysExecAddr, uint64_t u64CtxId)
    13071308{
    1308     PVMCPU pVCpu = VMMGetCpuById(pVM, idCpu);
     1309    PVMCPU pVCpu = pVM->apCpusR3[idCpu];
    13091310    VMCPU_ASSERT_EMT(pVCpu);
    13101311
     
    13461347    AssertRC(rc);
    13471348}
    1348 #else
     1349
     1350#else /* !VBOX_VMM_TARGET_ARMV8 */
     1351
    13491352/**
    13501353 * VCPU worker for VMMR3SendStartupIpi.
     
    13561359static DECLCALLBACK(int) vmmR3SendStartupIpi(PVM pVM, VMCPUID idCpu, uint32_t uVector)
    13571360{
    1358     PVMCPU pVCpu = VMMGetCpuById(pVM, idCpu);
     1361    PVMCPU pVCpu = pVM->apCpusR3[idCpu];
    13591362    VMCPU_ASSERT_EMT(pVCpu);
    13601363
     
    14111414static DECLCALLBACK(int) vmmR3SendInitIpi(PVM pVM, VMCPUID idCpu)
    14121415{
    1413     PVMCPU pVCpu = VMMGetCpuById(pVM, idCpu);
     1416    PVMCPU pVCpu = pVM->apCpusR3[idCpu];
    14141417    VMCPU_ASSERT_EMT(pVCpu);
    14151418
     
    14201423
    14211424    /* If the CPU is in VMX non-root mode, INIT signals cause VM-exits. */
    1422 #ifdef VBOX_WITH_NESTED_HWVIRT_VMX
     1425# ifdef VBOX_WITH_NESTED_HWVIRT_VMX
    14231426    PCCPUMCTX pCtx = CPUMQueryGuestCtxPtr(pVCpu);
    14241427    if (CPUMIsGuestInVmxNonRootMode(pCtx))
    14251428        return VBOXSTRICTRC_TODO(IEMExecVmxVmexit(pVCpu, VMX_EXIT_INIT_SIGNAL, 0 /* uExitQual */));
    1426 #endif
     1429# endif
    14271430
    14281431    /** @todo Figure out how to handle a SVM nested-guest intercepts here for INIT
     
    14311434    PGMR3ResetCpu(pVM, pVCpu);
    14321435    PDMR3ResetCpu(pVCpu);   /* Only clears pending interrupts force flags */
    1433 #if !defined(VBOX_VMM_TARGET_ARMV8)
     1436# if !defined(VBOX_VMM_TARGET_ARMV8)
    14341437    APICR3InitIpi(pVCpu);
    1435 #endif
     1438# endif
    14361439    TRPMR3ResetCpu(pVCpu);
    14371440    CPUMR3ResetCpu(pVM, pVCpu);
     
    14751478    AssertRC(rc);
    14761479}
    1477 #endif
    1478 
     1480
     1481#endif /* !VBOX_VMM_TARGET_ARMV8 */
    14791482
    14801483/**
  • trunk/src/VBox/VMM/include/PGMInline.h

    r100964 r103374  
    373373}
    374374
    375 
    376375#ifndef VBOX_VMM_TARGET_ARMV8
     376
    377377/**
    378378 * Checks if the no-execute (NX) feature is active (EFER.NXE=1).
     
    979979    return NULL;
    980980}
     981
    981982#endif /* !VBOX_VMM_TARGET_ARMV8 */
    982 
    983983
    984984/**
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