From c5c12c9c81bd8ef085a5453fe39e53df100915c3 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Thu, 28 Jul 2016 18:00:50 +0200 Subject: [PATCH] backports: add upstream driver fixes. Signed-off-by: Arne Fitzenreiter --- lfs/backports | 5 ++ .../backports-linux-upstream-1.patch | 60 +++++++++++++++++++ .../backports-linux-upstream-2.patch | 43 +++++++++++++ .../backports-linux-upstream-3.patch | 53 ++++++++++++++++ 4 files changed, 161 insertions(+) create mode 100644 src/patches/backports/backports-linux-upstream-1.patch create mode 100644 src/patches/backports/backports-linux-upstream-2.patch create mode 100644 src/patches/backports/backports-linux-upstream-3.patch diff --git a/lfs/backports b/lfs/backports index 3c8e6cdfd9..5706b753c0 100644 --- a/lfs/backports +++ b/lfs/backports @@ -112,6 +112,11 @@ ifeq "$(KCFG)" "-rpi" cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10-smsc95xx-add_mac_addr_param.patch endif + # Patches form stable linux updates + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/backports/backports-linux-upstream-1.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/backports/backports-linux-upstream-2.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/backports/backports-linux-upstream-3.patch + # generate config cd $(DIR_APP) && make KLIB=/lib/modules/$(KVER)-$(VERSUFIX)/ allmodconfig diff --git a/src/patches/backports/backports-linux-upstream-1.patch b/src/patches/backports/backports-linux-upstream-1.patch new file mode 100644 index 0000000000..c956aebb1c --- /dev/null +++ b/src/patches/backports/backports-linux-upstream-1.patch @@ -0,0 +1,60 @@ +From 5bb6f6e1d44aa91323857715dfddb63337f8307b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= +Date: Sun, 3 Jul 2016 22:24:50 +0200 +Subject: cdc_ncm: workaround for EM7455 "silent" data interface +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +[ Upstream commit c086e7096170390594c425114d98172bc9aceb8a ] + +Several Lenovo users have reported problems with their Sierra +Wireless EM7455 modem. The driver has loaded successfully and +the MBIM management channel has appeared to work, including +establishing a connection to the mobile network. But no frames +have been received over the data interface. + +The problem affects all EM7455 and MC7455, and is assumed to +affect other modems based on the same Qualcomm chipset and +baseband firmware. + +Testing narrowed the problem down to what seems to be a +firmware timing bug during initialization. Adding a short sleep +while probing is sufficient to make the problem disappear. +Experiments have shown that 1-2 ms is too little to have any +effect, while 10-20 ms is enough to reliably succeed. + +Reported-by: Stefan Armbruster +Reported-by: Ralph Plawetzki +Reported-by: Andreas Fett +Reported-by: Rasmus Lerdorf +Reported-by: Samo Ratnik +Reported-and-tested-by: Aleksander Morgado +Signed-off-by: Bjørn Mork +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/usb/cdc_ncm.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c +index c663722..584504e 100644 +--- a/drivers/net/usb/cdc_ncm.c ++++ b/drivers/net/usb/cdc_ncm.c +@@ -438,6 +438,13 @@ advance: + if (cdc_ncm_setup(dev)) + goto error2; + ++ /* Some firmwares need a pause here or they will silently fail ++ * to set up the interface properly. This value was decided ++ * empirically on a Sierra Wireless MC7455 running 02.08.02.00 ++ * firmware. ++ */ ++ usleep_range(10000, 20000); ++ + /* configure data interface */ + temp = usb_set_interface(dev->udev, iface_no, data_altsetting); + if (temp) { +-- +cgit v0.12 + diff --git a/src/patches/backports/backports-linux-upstream-2.patch b/src/patches/backports/backports-linux-upstream-2.patch new file mode 100644 index 0000000000..4cefcc7c50 --- /dev/null +++ b/src/patches/backports/backports-linux-upstream-2.patch @@ -0,0 +1,43 @@ +From d6b8a68ac7b6d2e241f8d34b769c98a1793d9124 Mon Sep 17 00:00:00 2001 +From: Ben Hutchings +Date: Wed, 20 Apr 2016 23:23:08 +0100 +Subject: atl2: Disable unimplemented scatter/gather feature + +[ Upstream commit f43bfaeddc79effbf3d0fcb53ca477cca66f3db8 ] + +atl2 includes NETIF_F_SG in hw_features even though it has no support +for non-linear skbs. This bug was originally harmless since the +driver does not claim to implement checksum offload and that used to +be a requirement for SG. + +Now that SG and checksum offload are independent features, if you +explicitly enable SG *and* use one of the rare protocols that can use +SG without checkusm offload, this potentially leaks sensitive +information (before you notice that it just isn't working). Therefore +this obscure bug has been designated CVE-2016-2117. + +Reported-by: Justin Yackoski +Signed-off-by: Ben Hutchings +Fixes: ec5f06156423 ("net: Kill link between CSUM and SG features.") +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/atheros/atlx/atl2.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/net/ethernet/atheros/atlx/atl2.c b/drivers/net/ethernet/atheros/atlx/atl2.c +index 265ce1b..96fe542 100644 +--- a/drivers/net/ethernet/atheros/atlx/atl2.c ++++ b/drivers/net/ethernet/atheros/atlx/atl2.c +@@ -1413,7 +1413,7 @@ static int atl2_probe(struct pci_dev *pdev, const struct pci_device_id *ent) + + err = -EIO; + +- netdev->hw_features = NETIF_F_SG | NETIF_F_HW_VLAN_CTAG_RX; ++ netdev->hw_features = NETIF_F_HW_VLAN_CTAG_RX; + netdev->features |= (NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX); + + /* Init PHY as early as possible due to power saving issue */ +-- +cgit v0.12 + diff --git a/src/patches/backports/backports-linux-upstream-3.patch b/src/patches/backports/backports-linux-upstream-3.patch new file mode 100644 index 0000000000..deb4a4c086 --- /dev/null +++ b/src/patches/backports/backports-linux-upstream-3.patch @@ -0,0 +1,53 @@ +From fc70a4a5cb616bf390cee03390265045de5cf06a Mon Sep 17 00:00:00 2001 +From: Feng Tang +Date: Fri, 24 Jun 2016 15:26:05 +0800 +Subject: net: alx: Work around the DMA RX overflow issue + +[ Upstream commit 881d0327db37ad917a367c77aff1afa1ee41e0a9 ] + +Note: This is a verified backported patch for stable 4.4 kernel, and it +could also be applied to 4.3/4.2/4.1/3.18/3.16 + +There is a problem with alx devices, that the network link will be +lost in 1-5 minutes after the device is up. + +>From debugging without datasheet, we found the error always +happen when the DMA RX address is set to 0x....fc0, which is very +likely to be a HW/silicon problem. + +This patch will apply rx skb with 64 bytes longer space, and if the +allocated skb has a 0x...fc0 address, it will use skb_resever(skb, 64) +to advance the address, so that the RX overflow can be avoided. + +Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=70761 +Signed-off-by: Feng Tang +Suggested-by: Eric Dumazet +Tested-by: Ole Lukoie +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/atheros/alx/main.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/drivers/net/ethernet/atheros/alx/main.c b/drivers/net/ethernet/atheros/alx/main.c +index 3e1d7d2..7585960 100644 +--- a/drivers/net/ethernet/atheros/alx/main.c ++++ b/drivers/net/ethernet/atheros/alx/main.c +@@ -86,9 +86,14 @@ static int alx_refill_rx_ring(struct alx_priv *alx, gfp_t gfp) + while (!cur_buf->skb && next != rxq->read_idx) { + struct alx_rfd *rfd = &rxq->rfd[cur]; + +- skb = __netdev_alloc_skb(alx->dev, alx->rxbuf_size, gfp); ++ skb = __netdev_alloc_skb(alx->dev, alx->rxbuf_size + 64, gfp); + if (!skb) + break; ++ ++ /* Workround for the HW RX DMA overflow issue */ ++ if (((unsigned long)skb->data & 0xfff) == 0xfc0) ++ skb_reserve(skb, 64); ++ + dma = dma_map_single(&alx->hw.pdev->dev, + skb->data, alx->rxbuf_size, + DMA_FROM_DEVICE); +-- +cgit v0.12 + -- 2.39.2