VirtualBox

Changeset 93616 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Feb 6, 2022 8:03:47 AM (3 years ago)
Author:
vboxsync
Message:

SUP: Make sure SUPR3PageAllocEx returns zero'ed memory. bugref:10094

Location:
trunk/src/VBox/HostDrivers/Support
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostDrivers/Support/SUPDrv.cpp

    r93515 r93616  
    38113811        int rc2;
    38123812        if (ppvR3)
     3813        {
     3814            /* Make sure memory mapped into ring-3 is zero initialized if we can: */
     3815            if (   ppvR0
     3816                && !RTR0MemObjWasZeroInitialized(Mem.MemObj))
     3817            {
     3818                void *pv = RTR0MemObjAddress(Mem.MemObj);
     3819                Assert(pv || !ppvR0);
     3820                if (pv)
     3821                    RT_BZERO(pv, (size_t)cPages * PAGE_SIZE);
     3822            }
     3823
    38133824            rc = RTR0MemObjMapUser(&Mem.MapObjR3, Mem.MemObj, (RTR3PTR)-1, 0, RTMEM_PROT_WRITE | RTMEM_PROT_READ, NIL_RTR0PROCESS);
     3825        }
    38143826        else
    38153827            Mem.MapObjR3 = NIL_RTR0MEMOBJ;
  • trunk/src/VBox/HostDrivers/Support/SUPLib.cpp

    r93182 r93616  
    11051105    if (RT_SUCCESS(rc))
    11061106    {
     1107        Assert(ASMMemIsZero(*ppvPages, cPages << PAGE_SHIFT));
    11071108        if (!paPages)
    11081109            paPages = (PSUPPAGE)alloca(sizeof(paPages[0]) * cPages);
     
    11351136    {
    11361137        int rc = SUPR3PageAlloc(cPages, 0 /*fFlags*/, ppvPages);
     1138        Assert(RT_FAILURE(rc) || ASMMemIsZero(*ppvPages, cPages << PAGE_SHIFT));
    11371139        if (pR0Ptr)
    11381140            *pR0Ptr = NIL_RTR0PTR;
     
    11861188                *ppvPages = pReq->u.Out.pvR3;
    11871189                if (pR0Ptr)
    1188                     *pR0Ptr   = pReq->u.Out.pvR0;
     1190                {
     1191                    *pR0Ptr = pReq->u.Out.pvR0;
     1192                    Assert(ASMMemIsZero(pReq->u.Out.pvR3, cPages << PAGE_SHIFT));
     1193#ifdef RT_OS_DARWIN /* HACK ALERT! */
     1194                    supR3TouchPages(pReq->u.Out.pvR3, cPages);
     1195#endif
     1196                }
     1197                else
     1198                    RT_BZERO(pReq->u.Out.pvR3, cPages << PAGE_SHIFT);
     1199
    11891200                if (paPages)
    11901201                    for (size_t iPage = 0; iPage < cPages; iPage++)
     
    11941205                        Assert(!(paPages[iPage].Phys & ~X86_PTE_PAE_PG_MASK));
    11951206                    }
    1196 #ifdef RT_OS_DARWIN /* HACK ALERT! */
    1197                 supR3TouchPages(pReq->u.Out.pvR3, cPages);
    1198 #endif
    11991207            }
    12001208            else if (   rc == VERR_NOT_SUPPORTED
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