hc
2024-05-10 23fa18eaa71266feff7ba8d83022d9e1cc83c65a
kernel/drivers/net/ethernet/broadcom/genet/bcmgenet.c
....@@ -2263,6 +2263,14 @@
22632263 __func__, p_index, ring->c_index,
22642264 ring->read_ptr, dma_length_status);
22652265
2266
+ if (unlikely(len > RX_BUF_LENGTH)) {
2267
+ netif_err(priv, rx_status, dev, "oversized packet\n");
2268
+ dev->stats.rx_length_errors++;
2269
+ dev->stats.rx_errors++;
2270
+ dev_kfree_skb_any(skb);
2271
+ goto next;
2272
+ }
2273
+
22662274 if (unlikely(!(dma_flag & DMA_EOP) || !(dma_flag & DMA_SOP))) {
22672275 netif_err(priv, rx_status, dev,
22682276 "dropping fragmented packet!\n");
....@@ -3389,7 +3397,7 @@
33893397 return ret;
33903398 }
33913399
3392
-static void bcmgenet_netif_stop(struct net_device *dev)
3400
+static void bcmgenet_netif_stop(struct net_device *dev, bool stop_phy)
33933401 {
33943402 struct bcmgenet_priv *priv = netdev_priv(dev);
33953403
....@@ -3404,7 +3412,8 @@
34043412 /* Disable MAC transmit. TX DMA disabled must be done before this */
34053413 umac_enable_set(priv, CMD_TX_EN, false);
34063414
3407
- phy_stop(dev->phydev);
3415
+ if (stop_phy)
3416
+ phy_stop(dev->phydev);
34083417 bcmgenet_disable_rx_napi(priv);
34093418 bcmgenet_intr_disable(priv);
34103419
....@@ -3430,7 +3439,7 @@
34303439
34313440 netif_dbg(priv, ifdown, dev, "bcmgenet_close\n");
34323441
3433
- bcmgenet_netif_stop(dev);
3442
+ bcmgenet_netif_stop(dev, false);
34343443
34353444 /* Really kill the PHY state machine and disconnect from it */
34363445 phy_disconnect(dev->phydev);
....@@ -4232,7 +4241,7 @@
42324241
42334242 netif_device_detach(dev);
42344243
4235
- bcmgenet_netif_stop(dev);
4244
+ bcmgenet_netif_stop(dev, true);
42364245
42374246 if (!device_may_wakeup(d))
42384247 phy_suspend(dev->phydev);