VirtualBox

Changeset 75754 in vbox


Ignore:
Timestamp:
Nov 27, 2018 12:53:03 AM (6 years ago)
Author:
vboxsync
Message:

VMMDevHGCM: don't overflow guest buffers.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/VMMDev/VMMDevHGCM.cpp

    r75740 r75754  
    591591    uint8_t *pu8Src = (uint8_t *)pvSrc;
    592592    uint32_t offPage = pPtr->offFirstPage;
    593     uint32_t cbRemaining = cbSrc;
     593    uint32_t cbRemaining = RT_MIN(cbSrc, pPtr->cbData);
    594594
    595595    uint32_t iPage;
     
    12061206            case VMMDevHGCMParmType_PageList:
    12071207            {
     1208/** @todo Update the return buffer size.  */
    12081209                const VBOXHGCMPARMPTR * const pPtr = &pGuestParm->u.ptr;
    12091210                if (   pPtr->cbData > 0
     
    12191220            case VMMDevHGCMParmType_Embedded:
    12201221            {
     1222/** @todo Update the return buffer size!  */
    12211223                const VBOXHGCMPARMPTR * const pPtr = &pGuestParm->u.ptr;
    12221224                if (   pPtr->cbData > 0
    12231225                    && (pPtr->fu32Direction & VBOX_HGCM_F_PARM_DIRECTION_FROM_HOST))
    12241226                {
    1225                     const void *pvSrc = pHostParm->u.pointer.addr;
    1226                     uint32_t    cbSrc = pHostParm->u.pointer.size;
     1227                    const void *pvSrc    = pHostParm->u.pointer.addr;
     1228                    uint32_t    cbSrc    = pHostParm->u.pointer.size;
     1229                    uint32_t    cbToCopy = RT_MIN(cbSrc, pPtr->cbData);
    12271230                    if (pCmd->pvReqLocked)
    1228                         memcpy((uint8_t *)pCmd->pvReqLocked + pPtr->offFirstPage, pvSrc, cbSrc);
     1231                        memcpy((uint8_t *)pCmd->pvReqLocked + pPtr->offFirstPage, pvSrc, cbToCopy);
    12291232                    else
    1230                         rc = PDMDevHlpPhysWrite(pThis->pDevInsR3, pGuestParm->u.ptr.GCPhysSinglePage, pvSrc, cbSrc);
     1233                        rc = PDMDevHlpPhysWrite(pThis->pDevInsR3, pGuestParm->u.ptr.GCPhysSinglePage, pvSrc, cbToCopy);
    12311234                }
    12321235                break;
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