VirtualBox

Changeset 76145 in vbox for trunk/src/VBox/Devices/VMMDev


Ignore:
Timestamp:
Dec 11, 2018 12:16:18 AM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
127390
Message:

VMMDevHGCM: Fix handling of embedded buffers in the non-locked code path. bugref:9172

File:
1 edited

Legend:

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

    r75990 r76145  
    11911191 * @param   pCmd            Completed call command.
    11921192 * @param   pHGCMCall       The guestrequest which needs updating (cached in the host memory).
    1193  */
    1194 static int vmmdevHGCMCompleteCallRequest(PVMMDEV pThis, PVBOXHGCMCMD pCmd, VMMDevHGCMCall *pHGCMCall)
     1193 * @param   pbReq           The request copy or locked memory for handling
     1194 *                          embedded buffers.
     1195 */
     1196static int vmmdevHGCMCompleteCallRequest(PVMMDEV pThis, PVBOXHGCMCMD pCmd, VMMDevHGCMCall *pHGCMCall, uint8_t *pbReq)
    11951197{
    11961198    AssertReturn(pCmd->enmCmdType == VBOXHGCMCMDTYPE_CALL, VERR_INTERNAL_ERROR);
     
    12471249                    uint32_t    cbSrc    = pHostParm->u.pointer.size;
    12481250                    uint32_t    cbToCopy = RT_MIN(cbSrc, pPtr->cbData);
    1249                     if (pCmd->pvReqLocked)
    1250                         memcpy((uint8_t *)pCmd->pvReqLocked + pPtr->offFirstPage, pvSrc, cbToCopy);
    1251                     else
    1252                         rc = PDMDevHlpPhysWrite(pThis->pDevInsR3, pGuestParm->u.ptr.GCPhysSinglePage, pvSrc, cbToCopy);
     1251                    memcpy(pbReq + pPtr->offFirstPage, pvSrc, cbToCopy);
    12531252                }
    12541253                break;
     
    13461345                        {
    13471346                            VMMDevHGCMCall *pHGCMCall = (VMMDevHGCMCall *)pHeader;
    1348                             rc = vmmdevHGCMCompleteCallRequest(pThis, pCmd, pHGCMCall);
     1347                            rc = vmmdevHGCMCompleteCallRequest(pThis, pCmd, pHGCMCall, (uint8_t *)pHeader);
    13491348#ifdef VBOX_WITH_DTRACE
    13501349                            idFunction = pCmd->u.call.u32Function;
     
    14291428                    {
    14301429                        VMMDevHGCMCall *pHGCMCall = (VMMDevHGCMCall *)pHeader;
    1431                         rc = vmmdevHGCMCompleteCallRequest(pThis, pCmd, pHGCMCall);
     1430                        rc = vmmdevHGCMCompleteCallRequest(pThis, pCmd, pHGCMCall, (uint8_t *)pHeader);
    14321431#ifdef VBOX_WITH_DTRACE
    14331432                        idFunction = pCmd->u.call.u32Function;
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