summaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorFlorian Fainelli <f.fainelli@gmail.com>2015-05-28 18:24:44 -0400
committerDavid S. Miller <davem@davemloft.net>2015-05-31 02:51:25 -0400
commit25977ac77d62b3de19908979ac84c8fd5809de6f (patch)
tree329f41c29ccf0528095ee270034511b114b01f21 /drivers/net
parentc73b01837eeeba91b9c22c67c6372a6b73f08473 (diff)
net: systemport: Add a check for oversized packets
Occasionnaly we may get oversized packets from the hardware which exceed the nomimal 2KiB buffer size we allocate SKBs with. Add an early check which drops the packet to avoid invoking skb_over_panic() and move on to processing the next packet. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/ethernet/broadcom/bcmsysport.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c
index d777b0db9e63..909ad7a0d480 100644
--- a/drivers/net/ethernet/broadcom/bcmsysport.c
+++ b/drivers/net/ethernet/broadcom/bcmsysport.c
@@ -638,6 +638,14 @@ static unsigned int bcm_sysport_desc_rx(struct bcm_sysport_priv *priv,
638 p_index, priv->rx_c_index, priv->rx_read_ptr, 638 p_index, priv->rx_c_index, priv->rx_read_ptr,
639 len, status); 639 len, status);
640 640
641 if (unlikely(len > RX_BUF_LENGTH)) {
642 netif_err(priv, rx_status, ndev, "oversized packet\n");
643 ndev->stats.rx_length_errors++;
644 ndev->stats.rx_errors++;
645 dev_kfree_skb_any(skb);
646 goto next;
647 }
648
641 if (unlikely(!(status & DESC_EOP) || !(status & DESC_SOP))) { 649 if (unlikely(!(status & DESC_EOP) || !(status & DESC_SOP))) {
642 netif_err(priv, rx_status, ndev, "fragmented packet!\n"); 650 netif_err(priv, rx_status, ndev, "fragmented packet!\n");
643 ndev->stats.rx_dropped++; 651 ndev->stats.rx_dropped++;