From mboxrd@z Thu Jan 1 00:00:00 1970 From: Felix Fietkau Subject: [PATCH v6 5/9] bgmac: add check for oversized packets Date: Tue, 14 Apr 2015 01:42:13 +0200 Message-ID: <1428968537-6181-5-git-send-email-nbd@openwrt.org> References: <1428968537-6181-1-git-send-email-nbd@openwrt.org> Cc: zajec5@gmail.com, hauke@hauke-m.de To: netdev@vger.kernel.org Return-path: Received: from static.88-198-24-112.clients.your-server.de ([88.198.24.112]:53107 "EHLO nbd.name" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751980AbbDMXmV (ORCPT ); Mon, 13 Apr 2015 19:42:21 -0400 In-Reply-To: <1428968537-6181-1-git-send-email-nbd@openwrt.org> Sender: netdev-owner@vger.kernel.org List-ID: 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 --- drivers/net/ethernet/broadcom/bgmac.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/net/ethernet/broadcom/bgmac.c b/drivers/net/ethernet/broadcom/bgmac.c index f897e62..eafdbca 100644 --- a/drivers/net/ethernet/broadcom/bgmac.c +++ b/drivers/net/ethernet/broadcom/bgmac.c @@ -440,6 +440,13 @@ static int bgmac_dma_rx_read(struct bgmac *bgmac, struct bgmac_dma_ring *ring, break; } + if (len > BGMAC_RX_ALLOC_SIZE) { + bgmac_err(bgmac, "Found oversized packet at slot %d, DMA issue!\n", + ring->start); + put_page(virt_to_head_page(buf)); + break; + } + /* Omit CRC. */ len -= ETH_FCS_LEN; -- 2.2.2