summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAhmad Fatoum <a.fatoum@pengutronix.de>2024-04-04 20:40:00 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2024-04-05 11:56:27 +0200
commit1ef8e95ec855a056361db95998de8ec157c58ff8 (patch)
treef8189cd1937485483d1573647b95cfe3b7d52d23
parent9a868a27e334a9436119450ae00ac6bebb84dbea (diff)
downloadbarebox-1ef8e95ec855.tar.gz
barebox-1ef8e95ec855.tar.xz
net: usb: smsc95xx: fix handling of multiple packets per urb
len is the actual length of the USB bulk transfer, while size is the length of the current packet, which may be different if we have multiple packets per transfer. We don't seem to run into this in barebox, perhaps because of our MTU, but let's fix it anyway. Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> Link: https://lore.barebox.org/20240404184001.1532897-10-a.fatoum@pengutronix.de Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r--drivers/net/usb/smsc95xx.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
index 1587128368..2e085c435d 100644
--- a/drivers/net/usb/smsc95xx.c
+++ b/drivers/net/usb/smsc95xx.c
@@ -790,14 +790,17 @@ static int smsc95xx_rx_fixup(struct usbnet *dev, void *buf, int len)
return 1;
}
- net_receive(&dev->edev, packet, len - 4);
+ net_receive(&dev->edev, packet, size - 4);
}
len -= size;
+ buf += size;
/* padding bytes before the next frame starts */
- if (len)
+ if (len) {
len -= align_count;
+ buf += align_count;
+ }
}
if (len < 0) {