kernel: bump 4.14 to 4.14.176
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 - 184-USB-serial-option-add-Wistron-Neweb-D19Q1.patch Fixes: - CVE-2020-8648 (potentially) - CVE-2020-8647 - CVE-2020-8649 Compile-tested on: cns3xxx, octeontx Runtime-tested on: cns3xxx Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com>master
parent
a7423fef32
commit
e31d158c4d
@ -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,55 +0,0 @@
|
|||||||
From 9d2e23253eb5fabff02a7ce4be9c4a7fc23562e8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Pawel Dembicki <paweldembicki@gmail.com>
|
|
||||||
Date: Fri, 20 Mar 2020 22:56:28 +0100
|
|
||||||
Subject: [PATCH v2 3/3] USB: serial: option: add Wistron Neweb D19Q1
|
|
||||||
|
|
||||||
This modem is embedded on dlink dwr-960 router.
|
|
||||||
The oem configuration states:
|
|
||||||
|
|
||||||
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=480 MxCh= 0
|
|
||||||
D: Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
|
|
||||||
P: Vendor=1435 ProdID=d191 Rev=ff.ff
|
|
||||||
S: Manufacturer=Android
|
|
||||||
S: Product=Android
|
|
||||||
S: SerialNumber=0123456789ABCDEF
|
|
||||||
C:* #Ifs= 6 Cfg#= 1 Atr=80 MxPwr=500mA
|
|
||||||
I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
|
|
||||||
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
||||||
E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
||||||
I:* If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
|
|
||||||
E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
||||||
E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
||||||
I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
|
|
||||||
E: Ad=84(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
|
|
||||||
E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
||||||
E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
||||||
I:* If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
|
|
||||||
E: Ad=86(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
|
|
||||||
E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
||||||
E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
||||||
I:* If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qmi_wwan
|
|
||||||
E: Ad=88(I) Atr=03(Int.) MxPS= 8 Ivl=32ms
|
|
||||||
E: Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
||||||
E: Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
||||||
I:* If#= 5 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=(none)
|
|
||||||
E: Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
||||||
E: Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=125us
|
|
||||||
|
|
||||||
Tested on openwrt distribution
|
|
||||||
|
|
||||||
Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
|
|
||||||
---
|
|
||||||
drivers/usb/serial/option.c | 2 ++
|
|
||||||
1 file changed, 2 insertions(+)
|
|
||||||
|
|
||||||
--- a/drivers/usb/serial/option.c
|
|
||||||
+++ b/drivers/usb/serial/option.c
|
|
||||||
@@ -1993,6 +1993,8 @@ static const struct usb_device_id option
|
|
||||||
{ USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e01, 0xff, 0xff, 0xff) }, /* D-Link DWM-152/C1 */
|
|
||||||
{ USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e02, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/C1 */
|
|
||||||
{ USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x7e11, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/A3 */
|
|
||||||
+ { USB_DEVICE_INTERFACE_CLASS(0x1435, 0xd191, 0xff), /* Wistron Neweb D19Q1 */
|
|
||||||
+ .driver_info = RSVD(1) | RSVD(4) },
|
|
||||||
{ USB_DEVICE_INTERFACE_CLASS(0x2020, 0x2031, 0xff), /* Olicard 600 */
|
|
||||||
.driver_info = RSVD(4) },
|
|
||||||
{ USB_DEVICE_INTERFACE_CLASS(0x2020, 0x2060, 0xff), /* BroadMobi BM818 */
|
|
@ -1,117 +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
|
|
||||||
@@ -56,6 +56,7 @@ struct bgx {
|
|
||||||
bool is_dlm;
|
|
||||||
bool is_rgx;
|
|
||||||
int phy_mode;
|
|
||||||
+ char irq_name[7];
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct bgx *bgx_vnic[MAX_BGX_THUNDER];
|
|
||||||
@@ -1344,6 +1345,53 @@ 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;
|
|
||||||
+
|
|
||||||
+ /* 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(bgx->irq_name, "BGX%d", bgx->bgx_id);
|
|
||||||
+ ret = request_irq(pci_irq_vector(pdev, GMPX_GMI_TX_INT),
|
|
||||||
+ bgx_intr_handler, 0, bgx->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
|
|
Loading…
Reference in New Issue