|
@@ -638,6 +638,14 @@ static unsigned int bcm_sysport_desc_rx(struct bcm_sysport_priv *priv,
|
|
|
p_index, priv->rx_c_index, priv->rx_read_ptr,
|
|
|
len, status);
|
|
|
|
|
|
+ if (unlikely(len > RX_BUF_LENGTH)) {
|
|
|
+ netif_err(priv, rx_status, ndev, "oversized packet\n");
|
|
|
+ ndev->stats.rx_length_errors++;
|
|
|
+ ndev->stats.rx_errors++;
|
|
|
+ dev_kfree_skb_any(skb);
|
|
|
+ goto next;
|
|
|
+ }
|
|
|
+
|
|
|
if (unlikely(!(status & DESC_EOP) || !(status & DESC_SOP))) {
|
|
|
netif_err(priv, rx_status, ndev, "fragmented packet!\n");
|
|
|
ndev->stats.rx_dropped++;
|