From 143cfee84c11c37bba5b7e0e306b40fb96ac3a6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Thu, 25 Jul 2013 19:18:50 +0200 Subject: [PATCH] usb_asix: takes into account that received data is padded to 16bit * also checks whether too little data is received. --- .../kernel/drivers/network/usb_asix/ASIXDevice.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/add-ons/kernel/drivers/network/usb_asix/ASIXDevice.cpp b/src/add-ons/kernel/drivers/network/usb_asix/ASIXDevice.cpp index 19eb3580bd..0590d59383 100644 --- a/src/add-ons/kernel/drivers/network/usb_asix/ASIXDevice.cpp +++ b/src/add-ons/kernel/drivers/network/usb_asix/ASIXDevice.cpp @@ -226,9 +226,14 @@ ASIXDevice::Read(uint8 *buffer, size_t *numBytes) *numBytes = header.Length(); - if (fActualLengthRead - sizeof(TRXHeader) > header.Length()) { + // the device pushes packets 16bit aligned + if (fActualLengthRead - sizeof(TRXHeader) > header.Length() + + (header.Length() % 2)) { TRACE_ALWAYS("MISMATCH of the frame length: hdr %d; received:%d\n", header.Length(), fActualLengthRead - sizeof(TRXHeader)); + } else if (fActualLengthRead - sizeof(TRXHeader) < header.Length()) { + TRACE_ALWAYS("Error: received too little data: hdr %d; received:%d\n", + header.Length(), fActualLengthRead - sizeof(TRXHeader)); } } else { @@ -750,4 +755,3 @@ ASIXDevice::_NotifyCallback(void *cookie, int32 status, void *data, device->fNotifyBufferLength, _NotifyCallback, device); atomic_add(&device->fInsideNotify, -1); } -