xhci: SubmitNormalRequest: divide exception on zero trbSize
workaround for #16586 Change-Id: Id9d538f46b62585f4a12c3796781ae1207ed2454 Reviewed-on: https://review.haiku-os.org/c/haiku/+/3611 Reviewed-by: waddlesplash <[email protected]>
This commit is contained in:
committed by
waddlesplash
parent
b8d6e720ba
commit
f9b26e4c30
@@ -810,7 +810,7 @@ XHCI::SubmitNormalRequest(Transfer *transfer)
|
|||||||
|
|
||||||
// Isochronous transfers use more specifically sized packets.
|
// Isochronous transfers use more specifically sized packets.
|
||||||
trbSize = transfer->DataLength() / isochronousData->packet_count;
|
trbSize = transfer->DataLength() / isochronousData->packet_count;
|
||||||
if (trbSize > pipe->MaxPacketSize() || trbSize
|
if (trbSize == 0 || trbSize > pipe->MaxPacketSize() || trbSize
|
||||||
!= (size_t)isochronousData->packet_descriptors[0].request_length)
|
!= (size_t)isochronousData->packet_descriptors[0].request_length)
|
||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
}
|
}
|
||||||
@@ -2045,6 +2045,10 @@ XHCI::ConfigureEndpoint(xhci_endpoint* ep, uint8 slot, uint8 number, uint8 type,
|
|||||||
// The Max Burst Payload is the number of bytes moved by a
|
// The Max Burst Payload is the number of bytes moved by a
|
||||||
// maximum sized burst. (XHCI 1.2 § 4.11.7.1 p236.)
|
// maximum sized burst. (XHCI 1.2 § 4.11.7.1 p236.)
|
||||||
ep->max_burst_payload = (maxBurst + 1) * maxPacketSize;
|
ep->max_burst_payload = (maxBurst + 1) * maxPacketSize;
|
||||||
|
if (ep->max_burst_payload == 0) {
|
||||||
|
TRACE_ERROR("ConfigureEndpoint() failed invalid max_burst_payload\n");
|
||||||
|
return B_BAD_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
// Assign average TRB length.
|
// Assign average TRB length.
|
||||||
if ((type & USB_OBJECT_CONTROL_PIPE) != 0) {
|
if ((type & USB_OBJECT_CONTROL_PIPE) != 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user