Skip to content

Commit

Permalink
[PATCH] sky2: handle hardware packet overrun
Browse files Browse the repository at this point in the history
It is possible for hardware to get confused when an oversized frame
is received. In that case, just drop the packet and increment a counter.

Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
  • Loading branch information
Stephen Hemminger authored and Jeff Garzik committed Dec 24, 2005
1 parent 6ed995b commit 6e15b71
Showing 1 changed file with 9 additions and 0 deletions.
9 changes: 9 additions & 0 deletions drivers/net/sky2.c
Original file line number Diff line number Diff line change
Expand Up @@ -1694,6 +1694,9 @@ static struct sk_buff *sky2_receive(struct sky2_port *sky2,
if (!(status & GMR_FS_RX_OK))
goto resubmit;

if ((status >> 16) != length || length > sky2->rx_bufsize)
goto oversize;

if (length < copybreak) {
skb = alloc_skb(length + 2, GFP_ATOMIC);
if (!skb)
Expand Down Expand Up @@ -1735,7 +1738,13 @@ static struct sk_buff *sky2_receive(struct sky2_port *sky2,

return skb;

oversize:
++sky2->net_stats.rx_over_errors;
goto resubmit;

error:
++sky2->net_stats.rx_errors;

if (netif_msg_rx_err(sky2))
printk(KERN_INFO PFX "%s: rx error, status 0x%x length %d\n",
sky2->netdev->name, status, length);
Expand Down

0 comments on commit 6e15b71

Please sign in to comment.