diff --git a/MdeModulePkg/Bus/Pci/UhciDxe/Uhci.c b/MdeModulePkg/Bus/Pci/UhciDxe/Uhci.c index 26f13dbfd0..568720d3ef 100644 --- a/MdeModulePkg/Bus/Pci/UhciDxe/Uhci.c +++ b/MdeModulePkg/Bus/Pci/UhciDxe/Uhci.c @@ -633,6 +633,7 @@ Uhci2ControlTransfer ( UINT8 *DataPhy; VOID *DataMap; BOOLEAN IsSlowDevice; + UINTN TransferDataLength; Uhc = UHC_FROM_USB2_HC_PROTO (This); TDs = NULL; @@ -660,10 +661,16 @@ Uhci2ControlTransfer ( return EFI_INVALID_PARAMETER; } - if ((TransferDirection != EfiUsbNoData) && (DataLength == NULL)) { + if ((TransferDirection != EfiUsbNoData) && (Data == NULL || DataLength == NULL)) { return EFI_INVALID_PARAMETER; } + if (TransferDirection == EfiUsbNoData) { + TransferDataLength = 0; + } else { + TransferDataLength = *DataLength; + } + *TransferResult = EFI_USB_ERR_SYSTEM; Status = EFI_DEVICE_ERROR; @@ -702,7 +709,7 @@ Uhci2ControlTransfer ( PktId, RequestPhy, DataPhy, - *DataLength, + TransferDataLength, (UINT8) MaximumPacketLength, IsSlowDevice );