aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2015-04-14 06:07:58 -0400
committerDavid S. Miller <davem@davemloft.net>2015-04-14 14:57:11 -0400
commit6a6c708469c9e10fd87adcc3abff164270538d62 (patch)
treeed99e2eca3251c5b805287f091b44793f1a9b7b0
parent56faacd04509f0a60ed646473a930fe584f1cb02 (diff)
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> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/broadcom/bgmac.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/net/ethernet/broadcom/bgmac.c b/drivers/net/ethernet/broadcom/bgmac.c
index 60b5c3ca8551..5a20108c80e5 100644
--- a/drivers/net/ethernet/broadcom/bgmac.c
+++ b/drivers/net/ethernet/broadcom/bgmac.c
@@ -445,6 +445,13 @@ static int bgmac_dma_rx_read(struct bgmac *bgmac, struct bgmac_dma_ring *ring,
445 break; 445 break;
446 } 446 }
447 447
448 if (len > BGMAC_RX_ALLOC_SIZE) {
449 bgmac_err(bgmac, "Found oversized packet at slot %d, DMA issue!\n",
450 ring->start);
451 put_page(virt_to_head_page(buf));
452 break;
453 }
454
448 /* Omit CRC. */ 455 /* Omit CRC. */
449 len -= ETH_FCS_LEN; 456 len -= ETH_FCS_LEN;
450 457