Changeset 84042 in vbox for trunk/src/VBox/Devices
- Timestamp:
- Apr 28, 2020 11:32:07 AM (5 years ago)
- svn:sync-xref-src-repo-rev:
- 137615
- Location:
- trunk/src/VBox/Devices/USB
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/USB/VUSBInternal.h
r82968 r84042 147 147 * accommodate any larger request (unlikely). */ 148 148 uint32_t cbMax; 149 /** VUSB internal data for the extra URB. */ 150 VUSBURBVUSBINT vUsbExtra; 149 151 /** The message URB. */ 150 152 VUSBURB Urb; -
trunk/src/VBox/Devices/USB/VUSBUrb.cpp
r83617 r84042 611 611 /** @todo reuse these? */ 612 612 PVUSBCTRLEXTRA pExtra; 613 const size_t cbMax = sizeof(VUSBURBVUSBINT) + sizeof(pExtra->Urb.abData) + sizeof(VUSBSETUP); 613 #if 0 614 const size_t cbMax = sizeof(pExtra->Urb.abData) + sizeof(VUSBSETUP); 615 #else 616 const size_t cbMax = sizeof(VUSBSETUP); 617 #endif 614 618 pExtra = (PVUSBCTRLEXTRA)RTMemAllocZ(RT_UOFFSETOF_DYN(VUSBCTRLEXTRA, Urb.abData[cbMax])); 615 619 if (pExtra) … … 629 633 RTStrAPrintf(&pExtra->Urb.pszDesc, "URB %p msg->%p", &pExtra->Urb, pUrb); 630 634 #endif 631 pExtra->Urb.pVUsb = (PVUSBURBVUSB)&pExtra-> Urb.abData[sizeof(pExtra->Urb.abData) + sizeof(VUSBSETUP)];635 pExtra->Urb.pVUsb = (PVUSBURBVUSB)&pExtra->vUsbExtra; 632 636 //pExtra->Urb.pVUsb->pCtrlUrb = NULL; 633 637 //pExtra->Urb.pVUsb->pNext = NULL; … … 701 705 * Check that we've got sufficient space in the message URB. 702 706 */ 703 if (pExtra->cbMax < cbBuf + pSetupIn->wLength + sizeof(VUSBURBVUSBINT)) 704 { 705 #if 1 706 LogRelMax(10, ("VUSB: Control URB too large (wLength=%u)!\n", pSetupIn->wLength)); 707 return false; 708 #else 709 uint32_t cbReq = RT_ALIGN_32(cbBuf + pSetupIn->wLength + sizeof(VUSBURBVUSBINT), 1024); 707 if (pExtra->cbMax < cbBuf + pSetupIn->wLength) 708 { 709 uint32_t cbReq = RT_ALIGN_32(cbBuf + pSetupIn->wLength, 64); 710 710 PVUSBCTRLEXTRA pNew = (PVUSBCTRLEXTRA)RTMemRealloc(pExtra, RT_UOFFSETOF_DYN(VUSBCTRLEXTRA, Urb.abData[cbReq])); 711 711 if (!pNew) … … 717 717 if (pExtra != pNew) 718 718 { 719 LogFunc(("Reallocated %u -> %u\n", pExtra->cbMax, cbReq)); 719 720 pNew->pMsg = (PVUSBSETUP)pNew->Urb.abData; 720 721 pExtra = pNew; 721 722 pPipe->pCtrl = pExtra; 723 pExtra->Urb.pVUsb = (PVUSBURBVUSB)&pExtra->vUsbExtra; 724 pExtra->Urb.pVUsb->pUrb = &pExtra->Urb; 725 pExtra->Urb.pVUsb->pvFreeCtx = &pExtra->Urb; 722 726 } 723 727 724 PVUSBURBVUSB pOldVUsb = (PVUSBURBVUSB)&pExtra->Urb.abData[pExtra->cbMax - sizeof(VUSBURBVUSBINT)];725 pExtra->Urb.pVUsb = (PVUSBURBVUSB)&pExtra->Urb.abData[cbBuf + pSetupIn->wLength];726 memmove(pExtra->Urb.pVUsb, pOldVUsb, sizeof(VUSBURBVUSBINT));727 memset(pOldVUsb, 0, (uint8_t *)pExtra->Urb.pVUsb - (uint8_t *)pOldVUsb);728 pExtra->Urb.pVUsb->pUrb = &pExtra->Urb;729 pExtra->Urb.pVUsb->pvFreeCtx = &pExtra->Urb;730 728 pExtra->cbMax = cbReq; 731 732 #endif733 729 } 734 730 Assert(pExtra->Urb.enmState == VUSBURBSTATE_ALLOCATED);
Note:
See TracChangeset
for help on using the changeset viewer.