Refreshed all patches. Remove upstreamed: - 0001-net-thunderx-workaround-BGX-TX-Underflow-issue.patch - 600-ipv6-addrconf-call-ipv6_mc_up-for-non-Ethernet-inter.patch - 003-ARM-dts-oxnas-Fix-clear-mask-property.patch Fixes: - CVE-2020-8647 - CVE-2020-8648 (potentially) - CVE-2020-8649 Compile-tested on: cns3xxx, octeontx Runtime-tested on: cns3xxx Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com>master
parent
286c407c3d
commit
0232f57e1a
@ -1,71 +0,0 @@ |
||||
From 82afdcd4ec3c8ca6551cbf7c43c09e2fd240487a Mon Sep 17 00:00:00 2001
|
||||
From: Hangbin Liu <liuhangbin@gmail.com>
|
||||
Date: Tue, 10 Mar 2020 15:27:37 +0800
|
||||
Subject: [PATCH] ipv6/addrconf: call ipv6_mc_up() for non-Ethernet interface
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Rafał found an issue that for non-Ethernet interface, if we down and up
|
||||
frequently, the memory will be consumed slowly.
|
||||
|
||||
The reason is we add allnodes/allrouters addressed in multicast list in
|
||||
ipv6_add_dev(). When link down, we call ipv6_mc_down(), store all multicast
|
||||
addresses via mld_add_delrec(). But when link up, we don't call ipv6_mc_up()
|
||||
for non-Ethernet interface to remove the addresses. This makes idev->mc_tomb
|
||||
getting bigger and bigger. The call stack looks like:
|
||||
|
||||
addrconf_notify(NETDEV_REGISTER)
|
||||
ipv6_add_dev
|
||||
ipv6_dev_mc_inc(ff01::1)
|
||||
ipv6_dev_mc_inc(ff02::1)
|
||||
ipv6_dev_mc_inc(ff02::2)
|
||||
|
||||
addrconf_notify(NETDEV_UP)
|
||||
addrconf_dev_config
|
||||
/* Alas, we support only Ethernet autoconfiguration. */
|
||||
return;
|
||||
|
||||
addrconf_notify(NETDEV_DOWN)
|
||||
addrconf_ifdown
|
||||
ipv6_mc_down
|
||||
igmp6_group_dropped(ff02::2)
|
||||
mld_add_delrec(ff02::2)
|
||||
igmp6_group_dropped(ff02::1)
|
||||
igmp6_group_dropped(ff01::1)
|
||||
|
||||
After investigating, I can't found a rule to disable multicast on
|
||||
non-Ethernet interface. In RFC2460, the link could be Ethernet, PPP, ATM,
|
||||
tunnels, etc. In IPv4, it doesn't check the dev type when calls ip_mc_up()
|
||||
in inetdev_event(). Even for IPv6, we don't check the dev type and call
|
||||
ipv6_add_dev(), ipv6_dev_mc_inc() after register device.
|
||||
|
||||
So I think it's OK to fix this memory consumer by calling ipv6_mc_up() for
|
||||
non-Ethernet interface.
|
||||
|
||||
v2: Also check IFF_MULTICAST flag to make sure the interface supports
|
||||
multicast
|
||||
|
||||
Reported-by: Rafał Miłecki <zajec5@gmail.com>
|
||||
Tested-by: Rafał Miłecki <zajec5@gmail.com>
|
||||
Fixes: 74235a25c673 ("[IPV6] addrconf: Fix IPv6 on tuntap tunnels")
|
||||
Fixes: 1666d49e1d41 ("mld: do not remove mld souce list info when set link down")
|
||||
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
net/ipv6/addrconf.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
--- a/net/ipv6/addrconf.c
|
||||
+++ b/net/ipv6/addrconf.c
|
||||
@@ -3223,6 +3223,10 @@ static void addrconf_dev_config(struct n
|
||||
(dev->type != ARPHRD_TUNNEL) &&
|
||||
(dev->type != ARPHRD_NONE)) {
|
||||
/* Alas, we support only Ethernet autoconfiguration. */
|
||||
+ idev = __in6_dev_get(dev);
|
||||
+ if (!IS_ERR_OR_NULL(idev) && dev->flags & IFF_UP &&
|
||||
+ dev->flags & IFF_MULTICAST)
|
||||
+ ipv6_mc_up(idev);
|
||||
return;
|
||||
}
|
||||
|
@ -1,110 +0,0 @@ |
||||
From b1e7791e688620c9bb8476ac2d0bc99abeb7f825 Mon Sep 17 00:00:00 2001
|
||||
From: Tim Harvey <tharvey@gateworks.com>
|
||||
Date: Fri, 29 Dec 2017 16:48:04 -0800
|
||||
Subject: [PATCH] net: thunderx: workaround BGX TX Underflow issue
|
||||
|
||||
While it is not yet understood why a TX underflow can easily occur
|
||||
for SGMII interfaces resulting in a TX wedge. It has been found that
|
||||
disabling/re-enabling the LMAC resolves the issue.
|
||||
|
||||
Signed-off-by: Tim Harvey <tharvey@gateworks.com>
|
||||
---
|
||||
drivers/net/ethernet/cavium/thunder/thunder_bgx.c | 54 +++++++++++++++++++++++
|
||||
drivers/net/ethernet/cavium/thunder/thunder_bgx.h | 9 ++++
|
||||
2 files changed, 63 insertions(+)
|
||||
|
||||
--- a/drivers/net/ethernet/cavium/thunder/thunder_bgx.c
|
||||
+++ b/drivers/net/ethernet/cavium/thunder/thunder_bgx.c
|
||||
@@ -1344,6 +1344,54 @@ static int bgx_init_phy(struct bgx *bgx)
|
||||
return bgx_init_of_phy(bgx);
|
||||
}
|
||||
|
||||
+static irqreturn_t bgx_intr_handler(int irq, void *data)
|
||||
+{
|
||||
+ struct bgx *bgx = (struct bgx *)data;
|
||||
+ struct device *dev = &bgx->pdev->dev;
|
||||
+ u64 status, val;
|
||||
+ int lmac;
|
||||
+
|
||||
+ for (lmac = 0; lmac < bgx->lmac_count; lmac++) {
|
||||
+ status = bgx_reg_read(bgx, lmac, BGX_GMP_GMI_TXX_INT);
|
||||
+ if (status & GMI_TXX_INT_UNDFLW) {
|
||||
+ dev_err(dev, "BGX%d lmac%d UNDFLW\n", bgx->bgx_id,
|
||||
+ lmac);
|
||||
+ val = bgx_reg_read(bgx, lmac, BGX_CMRX_CFG);
|
||||
+ val &= ~CMR_EN;
|
||||
+ bgx_reg_write(bgx, lmac, BGX_CMRX_CFG, val);
|
||||
+ val |= CMR_EN;
|
||||
+ bgx_reg_write(bgx, lmac, BGX_CMRX_CFG, val);
|
||||
+ }
|
||||
+ /* clear interrupts */
|
||||
+ bgx_reg_write(bgx, lmac, BGX_GMP_GMI_TXX_INT, status);
|
||||
+ }
|
||||
+
|
||||
+ return IRQ_HANDLED;
|
||||
+}
|
||||
+
|
||||
+static int bgx_register_intr(struct pci_dev *pdev)
|
||||
+{
|
||||
+ struct bgx *bgx = pci_get_drvdata(pdev);
|
||||
+ struct device *dev = &pdev->dev;
|
||||
+ int num_vec, ret;
|
||||
+ char irq_name[32];
|
||||
+
|
||||
+ /* Enable MSI-X */
|
||||
+ num_vec = pci_msix_vec_count(pdev);
|
||||
+ ret = pci_alloc_irq_vectors(pdev, num_vec, num_vec, PCI_IRQ_MSIX);
|
||||
+ if (ret < 0) {
|
||||
+ dev_err(dev, "Req for #%d msix vectors failed\n", num_vec);
|
||||
+ return 1;
|
||||
+ }
|
||||
+ sprintf(irq_name, "BGX%d", bgx->bgx_id);
|
||||
+ ret = request_irq(pci_irq_vector(pdev, GMPX_GMI_TX_INT),
|
||||
+ bgx_intr_handler, 0, irq_name, bgx);
|
||||
+ if (ret)
|
||||
+ return 1;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int bgx_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
{
|
||||
int err;
|
||||
@@ -1414,6 +1462,8 @@ static int bgx_probe(struct pci_dev *pde
|
||||
xcv_init_hw(bgx->phy_mode);
|
||||
bgx_init_hw(bgx);
|
||||
|
||||
+ bgx_register_intr(pdev);
|
||||
+
|
||||
/* Enable all LMACs */
|
||||
for (lmac = 0; lmac < bgx->lmac_count; lmac++) {
|
||||
err = bgx_lmac_enable(bgx, lmac);
|
||||
@@ -1424,6 +1474,10 @@ static int bgx_probe(struct pci_dev *pde
|
||||
bgx_lmac_disable(bgx, --lmac);
|
||||
goto err_enable;
|
||||
}
|
||||
+
|
||||
+ /* enable TX FIFO Underflow interrupt */
|
||||
+ bgx_reg_modify(bgx, lmac, BGX_GMP_GMI_TXX_INT_ENA_W1S,
|
||||
+ GMI_TXX_INT_UNDFLW);
|
||||
}
|
||||
|
||||
return 0;
|
||||
--- a/drivers/net/ethernet/cavium/thunder/thunder_bgx.h
|
||||
+++ b/drivers/net/ethernet/cavium/thunder/thunder_bgx.h
|
||||
@@ -179,6 +179,15 @@
|
||||
#define BGX_GMP_GMI_TXX_BURST 0x38228
|
||||
#define BGX_GMP_GMI_TXX_MIN_PKT 0x38240
|
||||
#define BGX_GMP_GMI_TXX_SGMII_CTL 0x38300
|
||||
+#define BGX_GMP_GMI_TXX_INT 0x38500
|
||||
+#define BGX_GMP_GMI_TXX_INT_W1S 0x38508
|
||||
+#define BGX_GMP_GMI_TXX_INT_ENA_W1C 0x38510
|
||||
+#define BGX_GMP_GMI_TXX_INT_ENA_W1S 0x38518
|
||||
+#define GMI_TXX_INT_PTP_LOST BIT_ULL(4)
|
||||
+#define GMI_TXX_INT_LATE_COL BIT_ULL(3)
|
||||
+#define GMI_TXX_INT_XSDEF BIT_ULL(2)
|
||||
+#define GMI_TXX_INT_XSCOL BIT_ULL(1)
|
||||
+#define GMI_TXX_INT_UNDFLW BIT_ULL(0)
|
||||
|
||||
#define BGX_MSIX_VEC_0_29_ADDR 0x400000 /* +(0..29) << 4 */
|
||||
#define BGX_MSIX_VEC_0_29_CTL 0x400008
|
@ -1,55 +0,0 @@ |
||||
From patchwork Sat Mar 21 14:36:53 2020
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: 7bit
|
||||
X-Patchwork-Submitter: Sungbo Eo <mans0n@gorani.run>
|
||||
X-Patchwork-Id: 11451187
|
||||
From: Sungbo Eo <mans0n@gorani.run>
|
||||
To: Neil Armstrong <narmstrong@baylibre.com>,
|
||||
Rob Herring <robh+dt@kernel.org>,
|
||||
Mark Rutland <mark.rutland@arm.com>, linux-arm-kernel@lists.infradead.org,
|
||||
linux-oxnas@groups.io, devicetree@vger.kernel.org,
|
||||
linux-kernel@vger.kernel.org
|
||||
Subject: [PATCH] ARM: dts: oxnas: Fix clear-mask property
|
||||
Date: Sat, 21 Mar 2020 23:36:53 +0900
|
||||
Message-Id: <20200321143653.2412823-1-mans0n@gorani.run>
|
||||
Sender: "linux-arm-kernel" <linux-arm-kernel-bounces@lists.infradead.org>
|
||||
|
||||
Disable all rps-irq interrupts during driver initialization to prevent
|
||||
an accidental interrupt on GIC.
|
||||
|
||||
Fixes: 84316f4ef141 ("ARM: boot: dts: Add Oxford Semiconductor OX810SE dtsi")
|
||||
Fixes: 38d4a53733f5 ("ARM: dts: Add support for OX820 and Pogoplug V3")
|
||||
Signed-off-by: Sungbo Eo <mans0n@gorani.run>
|
||||
Acked-by: Neil Armstrong <narmstrong@baylibre.com>
|
||||
---
|
||||
arch/arm/boot/dts/ox810se.dtsi | 4 ++--
|
||||
arch/arm/boot/dts/ox820.dtsi | 4 ++--
|
||||
2 files changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/arch/arm/boot/dts/ox810se.dtsi
|
||||
+++ b/arch/arm/boot/dts/ox810se.dtsi
|
||||
@@ -323,8 +323,8 @@
|
||||
interrupt-controller;
|
||||
reg = <0 0x200>;
|
||||
#interrupt-cells = <1>;
|
||||
- valid-mask = <0xFFFFFFFF>;
|
||||
- clear-mask = <0>;
|
||||
+ valid-mask = <0xffffffff>;
|
||||
+ clear-mask = <0xffffffff>;
|
||||
};
|
||||
|
||||
timer0: timer@200 {
|
||||
--- a/arch/arm/boot/dts/ox820.dtsi
|
||||
+++ b/arch/arm/boot/dts/ox820.dtsi
|
||||
@@ -240,8 +240,8 @@
|
||||
reg = <0 0x200>;
|
||||
interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#interrupt-cells = <1>;
|
||||
- valid-mask = <0xFFFFFFFF>;
|
||||
- clear-mask = <0>;
|
||||
+ valid-mask = <0xffffffff>;
|
||||
+ clear-mask = <0xffffffff>;
|
||||
};
|
||||
|
||||
timer0: timer@200 {
|
Loading…
Reference in new issue