Author: mmlr Date: 2011-06-10 19:20:27 +0200 (Fri, 10 Jun 2011) New Revision: 42088 Changeset: https://dev.haiku-os.org/changeset/42088 Modified: haiku/trunk/src/add-ons/kernel/drivers/ports/usb_serial/FTDI.cpp haiku/trunk/src/add-ons/kernel/drivers/ports/usb_serial/KLSI.cpp Log: Apply limits to the transfer lengths. At least in the case where a one byte FTDI header is used that only has 6 bits of length info this would've previously potentially overflowed depending on the input size. Modified: haiku/trunk/src/add-ons/kernel/drivers/ports/usb_serial/FTDI.cpp =================================================================== --- haiku/trunk/src/add-ons/kernel/drivers/ports/usb_serial/FTDI.cpp 2011-06-10 17:18:06 UTC (rev 42087) +++ haiku/trunk/src/add-ons/kernel/drivers/ports/usb_serial/FTDI.cpp 2011-06-10 17:20:27 UTC (rev 42088) @@ -225,9 +225,12 @@ void FTDIDevice::OnWrite(const char *buffer, size_t *numBytes, size_t *packetBytes) { + if (*numBytes > FTDI_BUFFER_SIZE) + *numBytes = *packetBytes = FTDI_BUFFER_SIZE; + char *writeBuffer = WriteBuffer(); if (fHeaderLength > 0) { - if (*numBytes >= WriteBufferSize() - fHeaderLength) + if (*numBytes > WriteBufferSize() - fHeaderLength) *numBytes = *packetBytes = WriteBufferSize() - fHeaderLength; *writeBuffer = FTDI_OUT_TAG(*numBytes, FTDI_PIT_DEFAULT); Modified: haiku/trunk/src/add-ons/kernel/drivers/ports/usb_serial/KLSI.cpp =================================================================== --- haiku/trunk/src/add-ons/kernel/drivers/ports/usb_serial/KLSI.cpp 2011-06-10 17:18:06 UTC (rev 42087) +++ haiku/trunk/src/add-ons/kernel/drivers/ports/usb_serial/KLSI.cpp 2011-06-10 17:20:27 UTC (rev 42088) @@ -149,7 +149,10 @@ void KLSIDevice::OnWrite(const char *buffer, size_t *numBytes, size_t *packetBytes) { - if (*numBytes >= WriteBufferSize() - 2) + if (*numBytes > KLSI_BUFFER_SIZE) + *numBytes = *packetBytes = KLSI_BUFFER_SIZE; + + if (*numBytes > WriteBufferSize() - 2) *numBytes = *packetBytes = WriteBufferSize() - 2; char *writeBuffer = WriteBuffer();