net: smsc95xx: Correct free_pkt() implementation
authorSimon Glass <sjg@chromium.org>
Wed, 5 Apr 2017 22:23:28 +0000 (16:23 -0600)
committerTom Rini <trini@konsulko.com>
Wed, 10 May 2017 00:17:24 +0000 (20:17 -0400)
On further review this returns the wrong packet length from the driver.
It may not be noticed since protocols will take care of it. Fix it by
subtracting the header length from the packet length returned.

Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/usb/eth/smsc95xx.c

index d4c8ea4a98aa5a44af0956a3418820c1625c5939..26000a5a45b32b3472a605bdda20226bad5649cc 100644 (file)
@@ -998,7 +998,7 @@ int smsc95xx_eth_recv(struct udevice *dev, int flags, uchar **packetp)
        }
 
        *packetp = ptr + sizeof(packet_len);
-       return packet_len;
+       return packet_len - 4;
 
 err:
        usb_ether_advance_rxbuf(ueth, -1);
@@ -1009,7 +1009,7 @@ static int smsc95xx_free_pkt(struct udevice *dev, uchar *packet, int packet_len)
 {
        struct smsc95xx_private *priv = dev_get_priv(dev);
 
-       packet_len = ALIGN(packet_len, 4);
+       packet_len = ALIGN(packet_len + sizeof(u32), 4);
        usb_ether_advance_rxbuf(&priv->ueth, sizeof(u32) + packet_len);
 
        return 0;