summaryrefslogtreecommitdiffstats
path: root/target/linux/generic/patches-4.0/072-08-bgmac-add-check-for-oversized-packets.patch
diff options
context:
space:
mode:
authorRafał Miłecki <zajec5@gmail.com>2015-04-23 19:11:11 +0000
committerRafał Miłecki <zajec5@gmail.com>2015-04-23 19:11:11 +0000
commite175b199f8b5947ee498d049b2f4dff694e08e72 (patch)
tree4b05b80ec4ce1411d37dba7006cc5a8534672108 /target/linux/generic/patches-4.0/072-08-bgmac-add-check-for-oversized-packets.patch
parent62e7f07615192b909ddb71408e67c4938b08b3cc (diff)
downloadmaster-31e0f0ae-e175b199f8b5947ee498d049b2f4dff694e08e72.tar.gz
master-31e0f0ae-e175b199f8b5947ee498d049b2f4dff694e08e72.tar.bz2
master-31e0f0ae-e175b199f8b5947ee498d049b2f4dff694e08e72.zip
kernel: backport rest of bgmac patches to 4.0
Signed-off-by: Rafał Miłecki <zajec5@gmail.com> SVN-Revision: 45573
Diffstat (limited to 'target/linux/generic/patches-4.0/072-08-bgmac-add-check-for-oversized-packets.patch')
-rw-r--r--target/linux/generic/patches-4.0/072-08-bgmac-add-check-for-oversized-packets.patch27
1 files changed, 27 insertions, 0 deletions
diff --git a/target/linux/generic/patches-4.0/072-08-bgmac-add-check-for-oversized-packets.patch b/target/linux/generic/patches-4.0/072-08-bgmac-add-check-for-oversized-packets.patch
new file mode 100644
index 0000000000..705aa2d2a4
--- /dev/null
+++ b/target/linux/generic/patches-4.0/072-08-bgmac-add-check-for-oversized-packets.patch
@@ -0,0 +1,27 @@
+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
+@@ -445,6 +445,13 @@ static int bgmac_dma_rx_read(struct bgma
+ 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;
+