2015-04-12 22:10:40 +00:00
|
|
|
From: Felix Fietkau <nbd@openwrt.org>
|
|
|
|
Date: Sun, 12 Apr 2015 22:28:20 +0200
|
|
|
|
Subject: [PATCH] bgmac: add check for oversized packets
|
|
|
|
|
|
|
|
In very rare cases, the MAC can catch an internal buffer that is bigger
|
|
|
|
than it's supposed to be. Instead of crashing the kernel, simply pass
|
|
|
|
the buffer back to the hardware
|
|
|
|
|
|
|
|
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
|
|
|
---
|
|
|
|
|
|
|
|
--- a/drivers/net/ethernet/broadcom/bgmac.c
|
|
|
|
+++ b/drivers/net/ethernet/broadcom/bgmac.c
|
2015-04-13 17:32:33 +00:00
|
|
|
@@ -428,6 +428,13 @@ static int bgmac_dma_rx_read(struct bgma
|
2015-04-12 22:10:40 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
+ if (len > BGMAC_RX_ALLOC_SIZE) {
|
|
|
|
+ bgmac_err(bgmac, "Found oversized packet at slot %d, DMA issue!\n",
|
|
|
|
+ ring->start);
|
2015-04-13 20:08:30 +00:00
|
|
|
+ put_page(virt_to_head_page(buf));
|
2015-04-12 22:10:40 +00:00
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
/* Omit CRC. */
|
|
|
|
len -= ETH_FCS_LEN;
|
|
|
|
|