VirtualBox

Changeset 99368 in vbox for trunk/src


Ignore:
Timestamp:
Apr 10, 2023 6:52:44 PM (22 months ago)
Author:
vboxsync
Message:

VUSB: Better cleanup when recycling URB memory (see bugref:10140).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/USB/VUSBUrbPool.cpp

    r98103 r99368  
    163163                RTListNodeRemove(&pIt->NdFree);
    164164                ASMAtomicDecU32(&pUrbPool->cUrbsInPool);
     165                pIt->cbAllocated  = 0;
     166                pIt->Urb.u32Magic = 0;
     167                pIt->Urb.enmState = VUSBURBSTATE_INVALID;
    165168                RTMemFree(pIt);
    166169            }
     
    185188        pHdr->cAge        = 0;
    186189        ASMAtomicIncU32(&pUrbPool->cUrbsInPool);
     190    }
     191    else
     192    {
     193        /* Paranoia: Clear memory that's part of the guest data buffer now
     194         * but wasn't before. See @bugref{10410}.
     195         */
     196        if (cbData > pHdr->Urb.cbData)
     197        {
     198            memset(&pHdr->Urb.abData[pHdr->Urb.cbData], 0, cbData - pHdr->Urb.cbData);
     199        }
    187200    }
    188201    RTCritSectLeave(&pUrbPool->CritSectPool);
     
    230243    {
    231244        ASMAtomicDecU32(&pUrbPool->cUrbsInPool);
     245        pHdr->cbAllocated  = 0;
     246        pHdr->Urb.u32Magic = 0;
     247        pHdr->Urb.enmState = VUSBURBSTATE_INVALID;
    232248        RTMemFree(pHdr);
    233249    }
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