From: Greg Kroah-Hartman Date: Wed, 15 Mar 2017 07:25:24 +0000 (+0800) Subject: 4.9-stable patches X-Git-Tag: v4.4.55~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c72a9634b9100377f1f886fd4ebfb6f859483f50;p=thirdparty%2Fkernel%2Fstable-queue.git 4.9-stable patches added patches: bcm63xx_enet-avoid-uninitialized-variable-warning.patch cpmac-remove-hopeless-warning.patch crypto-improve-gcc-optimization-flags-for-serpent-and-wp512.patch mips-ip22-fix-ip28-build-for-modern-gcc.patch mips-ip27-disable-qlge-driver-in-defconfig.patch mips-ralink-cosmetic-change-to-prom_init.patch mips-ralink-remove-unused-rt-_wdt_reset-functions.patch mips-ralink-remove-unused-timer-functions.patch mips-update-defconfigs-for-nf_ct_proto_dccp-udplite-change.patch mips-update-ip27_defconfig-for-scsi_dh-change.patch mips-update-lemote2f_defconfig-for-cpu_freq_stat-change.patch mips-vdso-avoid-duplicate-cac_base-definition.patch mtd-pmcmsp-use-kstrndup-instead-of-kmalloc-strncpy.patch usb-serial-digi_acceleport-fix-oob-data-sanity-check.patch usb-serial-digi_acceleport-fix-oob-event-processing.patch --- diff --git a/queue-4.9/bcm63xx_enet-avoid-uninitialized-variable-warning.patch b/queue-4.9/bcm63xx_enet-avoid-uninitialized-variable-warning.patch new file mode 100644 index 00000000000..18a96dde6c5 --- /dev/null +++ b/queue-4.9/bcm63xx_enet-avoid-uninitialized-variable-warning.patch @@ -0,0 +1,56 @@ +From df384d435a5c034c735df3d9ea87a03172c59b56 Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Wed, 18 Jan 2017 15:52:53 +0100 +Subject: bcm63xx_enet: avoid uninitialized variable warning + +From: Arnd Bergmann + +commit df384d435a5c034c735df3d9ea87a03172c59b56 upstream. + +gcc-7 and probably earlier versions get confused by this function +and print a harmless warning: + +drivers/net/ethernet/broadcom/bcm63xx_enet.c: In function 'bcm_enet_open': +drivers/net/ethernet/broadcom/bcm63xx_enet.c:1130:3: error: 'phydev' may be used uninitialized in this function [-Werror=maybe-uninitialized] + +This adds an initialization for the 'phydev' variable when it is unused +and changes the check to test for that NULL pointer to make it clear +that we always pass a valid pointer here. + +Signed-off-by: Arnd Bergmann +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/ethernet/broadcom/bcm63xx_enet.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c ++++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c +@@ -913,6 +913,8 @@ static int bcm_enet_open(struct net_devi + priv->old_link = 0; + priv->old_duplex = -1; + priv->old_pause = -1; ++ } else { ++ phydev = NULL; + } + + /* mask all interrupts and request them */ +@@ -1083,7 +1085,7 @@ static int bcm_enet_open(struct net_devi + enet_dmac_writel(priv, priv->dma_chan_int_mask, + ENETDMAC_IRMASK, priv->tx_chan); + +- if (priv->has_phy) ++ if (phydev) + phy_start(phydev); + else + bcm_enet_adjust_link(dev); +@@ -1126,7 +1128,7 @@ out_freeirq: + free_irq(dev->irq, dev); + + out_phy_disconnect: +- if (priv->has_phy) ++ if (phydev) + phy_disconnect(phydev); + + return ret; diff --git a/queue-4.9/cpmac-remove-hopeless-warning.patch b/queue-4.9/cpmac-remove-hopeless-warning.patch new file mode 100644 index 00000000000..595e8e34444 --- /dev/null +++ b/queue-4.9/cpmac-remove-hopeless-warning.patch @@ -0,0 +1,36 @@ +From d43e6fb4ac4abfe4ef7c102833ed02330ad701e0 Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Mon, 16 Jan 2017 14:20:54 +0100 +Subject: cpmac: remove hopeless #warning + +From: Arnd Bergmann + +commit d43e6fb4ac4abfe4ef7c102833ed02330ad701e0 upstream. + +The #warning was present 10 years ago when the driver first got merged. +As the platform is rather obsolete by now, it seems very unlikely that +the warning will cause anyone to fix the code properly. + +kernelci.org reports the warning for every build in the meantime, so +I think it's better to just turn it into a code comment to reduce +noise. + +Signed-off-by: Arnd Bergmann +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/ethernet/ti/cpmac.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/net/ethernet/ti/cpmac.c ++++ b/drivers/net/ethernet/ti/cpmac.c +@@ -1211,7 +1211,7 @@ int cpmac_init(void) + goto fail_alloc; + } + +-#warning FIXME: unhardcode gpio&reset bits ++ /* FIXME: unhardcode gpio&reset bits */ + ar7_gpio_disable(26); + ar7_gpio_disable(27); + ar7_device_reset(AR7_RESET_BIT_CPMAC_LO); diff --git a/queue-4.9/crypto-improve-gcc-optimization-flags-for-serpent-and-wp512.patch b/queue-4.9/crypto-improve-gcc-optimization-flags-for-serpent-and-wp512.patch new file mode 100644 index 00000000000..0a27b315765 --- /dev/null +++ b/queue-4.9/crypto-improve-gcc-optimization-flags-for-serpent-and-wp512.patch @@ -0,0 +1,158 @@ +From 7d6e9105026788c497f0ab32fa16c82f4ab5ff61 Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Fri, 3 Feb 2017 23:33:23 +0100 +Subject: crypto: improve gcc optimization flags for serpent and wp512 + +From: Arnd Bergmann + +commit 7d6e9105026788c497f0ab32fa16c82f4ab5ff61 upstream. + +An ancient gcc bug (first reported in 2003) has apparently resurfaced +on MIPS, where kernelci.org reports an overly large stack frame in the +whirlpool hash algorithm: + +crypto/wp512.c:987:1: warning: the frame size of 1112 bytes is larger than 1024 bytes [-Wframe-larger-than=] + +With some testing in different configurations, I'm seeing large +variations in stack frames size up to 1500 bytes for what should have +around 300 bytes at most. I also checked the reference implementation, +which is essentially the same code but also comes with some test and +benchmarking infrastructure. + +It seems that recent compiler versions on at least arm, arm64 and powerpc +have a partial fix for this problem, but enabling "-fsched-pressure", but +even with that fix they suffer from the issue to a certain degree. Some +testing on arm64 shows that the time needed to hash a given amount of +data is roughly proportional to the stack frame size here, which makes +sense given that the wp512 implementation is doing lots of loads for +table lookups, and the problem with the overly large stack is a result +of doing a lot more loads and stores for spilled registers (as seen from +inspecting the object code). + +Disabling -fschedule-insns consistently fixes the problem for wp512, +in my collection of cross-compilers, the results are consistently better +or identical when comparing the stack sizes in this function, though +some architectures (notable x86) have schedule-insns disabled by +default. + +The four columns are: +default: -O2 +press: -O2 -fsched-pressure +nopress: -O2 -fschedule-insns -fno-sched-pressure +nosched: -O2 -no-schedule-insns (disables sched-pressure) + + default press nopress nosched +alpha-linux-gcc-4.9.3 1136 848 1136 176 +am33_2.0-linux-gcc-4.9.3 2100 2076 2100 2104 +arm-linux-gnueabi-gcc-4.9.3 848 848 1048 352 +cris-linux-gcc-4.9.3 272 272 272 272 +frv-linux-gcc-4.9.3 1128 1000 1128 280 +hppa64-linux-gcc-4.9.3 1128 336 1128 184 +hppa-linux-gcc-4.9.3 644 308 644 276 +i386-linux-gcc-4.9.3 352 352 352 352 +m32r-linux-gcc-4.9.3 720 656 720 268 +microblaze-linux-gcc-4.9.3 1108 604 1108 256 +mips64-linux-gcc-4.9.3 1328 592 1328 208 +mips-linux-gcc-4.9.3 1096 624 1096 240 +powerpc64-linux-gcc-4.9.3 1088 432 1088 160 +powerpc-linux-gcc-4.9.3 1080 584 1080 224 +s390-linux-gcc-4.9.3 456 456 624 360 +sh3-linux-gcc-4.9.3 292 292 292 292 +sparc64-linux-gcc-4.9.3 992 240 992 208 +sparc-linux-gcc-4.9.3 680 592 680 312 +x86_64-linux-gcc-4.9.3 224 240 272 224 +xtensa-linux-gcc-4.9.3 1152 704 1152 304 + +aarch64-linux-gcc-7.0.0 224 224 1104 208 +arm-linux-gnueabi-gcc-7.0.1 824 824 1048 352 +mips-linux-gcc-7.0.0 1120 648 1120 272 +x86_64-linux-gcc-7.0.1 240 240 304 240 + +arm-linux-gnueabi-gcc-4.4.7 840 392 +arm-linux-gnueabi-gcc-4.5.4 784 728 784 320 +arm-linux-gnueabi-gcc-4.6.4 736 728 736 304 +arm-linux-gnueabi-gcc-4.7.4 944 784 944 352 +arm-linux-gnueabi-gcc-4.8.5 464 464 760 352 +arm-linux-gnueabi-gcc-4.9.3 848 848 1048 352 +arm-linux-gnueabi-gcc-5.3.1 824 824 1064 336 +arm-linux-gnueabi-gcc-6.1.1 808 808 1056 344 +arm-linux-gnueabi-gcc-7.0.1 824 824 1048 352 + +Trying the same test for serpent-generic, the picture is a bit different, +and while -fno-schedule-insns is generally better here than the default, +-fsched-pressure wins overall, so I picked that instead. + + default press nopress nosched +alpha-linux-gcc-4.9.3 1392 864 1392 960 +am33_2.0-linux-gcc-4.9.3 536 524 536 528 +arm-linux-gnueabi-gcc-4.9.3 552 552 776 536 +cris-linux-gcc-4.9.3 528 528 528 528 +frv-linux-gcc-4.9.3 536 400 536 504 +hppa64-linux-gcc-4.9.3 524 208 524 480 +hppa-linux-gcc-4.9.3 768 472 768 508 +i386-linux-gcc-4.9.3 564 564 564 564 +m32r-linux-gcc-4.9.3 712 576 712 532 +microblaze-linux-gcc-4.9.3 724 392 724 512 +mips64-linux-gcc-4.9.3 720 384 720 496 +mips-linux-gcc-4.9.3 728 384 728 496 +powerpc64-linux-gcc-4.9.3 704 304 704 480 +powerpc-linux-gcc-4.9.3 704 296 704 480 +s390-linux-gcc-4.9.3 560 560 592 536 +sh3-linux-gcc-4.9.3 540 540 540 540 +sparc64-linux-gcc-4.9.3 544 352 544 496 +sparc-linux-gcc-4.9.3 544 344 544 496 +x86_64-linux-gcc-4.9.3 528 536 576 528 +xtensa-linux-gcc-4.9.3 752 544 752 544 + +aarch64-linux-gcc-7.0.0 432 432 656 480 +arm-linux-gnueabi-gcc-7.0.1 616 616 808 536 +mips-linux-gcc-7.0.0 720 464 720 488 +x86_64-linux-gcc-7.0.1 536 528 600 536 + +arm-linux-gnueabi-gcc-4.4.7 592 440 +arm-linux-gnueabi-gcc-4.5.4 776 448 776 544 +arm-linux-gnueabi-gcc-4.6.4 776 448 776 544 +arm-linux-gnueabi-gcc-4.7.4 768 448 768 544 +arm-linux-gnueabi-gcc-4.8.5 488 488 776 544 +arm-linux-gnueabi-gcc-4.9.3 552 552 776 536 +arm-linux-gnueabi-gcc-5.3.1 552 552 776 536 +arm-linux-gnueabi-gcc-6.1.1 560 560 776 536 +arm-linux-gnueabi-gcc-7.0.1 616 616 808 536 + +I did not do any runtime tests with serpent, so it is possible that stack +frame size does not directly correlate with runtime performance here and +it actually makes things worse, but it's more likely to help here, and +the reduced stack frame size is probably enough reason to apply the patch, +especially given that the crypto code is often used in deep call chains. + +Link: https://kernelci.org/build/id/58797d7559b5149efdf6c3a9/logs/ +Link: http://www.larc.usp.br/~pbarreto/WhirlpoolPage.html +Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=11488 +Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79149 +Cc: Ralf Baechle +Signed-off-by: Arnd Bergmann +Signed-off-by: Herbert Xu +Signed-off-by: Greg Kroah-Hartman + +--- + crypto/Makefile | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/crypto/Makefile ++++ b/crypto/Makefile +@@ -71,6 +71,7 @@ obj-$(CONFIG_CRYPTO_SHA256) += sha256_ge + obj-$(CONFIG_CRYPTO_SHA512) += sha512_generic.o + obj-$(CONFIG_CRYPTO_SHA3) += sha3_generic.o + obj-$(CONFIG_CRYPTO_WP512) += wp512.o ++CFLAGS_wp512.o := $(call cc-option,-fno-schedule-insns) # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79149 + obj-$(CONFIG_CRYPTO_TGR192) += tgr192.o + obj-$(CONFIG_CRYPTO_GF128MUL) += gf128mul.o + obj-$(CONFIG_CRYPTO_ECB) += ecb.o +@@ -94,6 +95,7 @@ obj-$(CONFIG_CRYPTO_BLOWFISH_COMMON) += + obj-$(CONFIG_CRYPTO_TWOFISH) += twofish_generic.o + obj-$(CONFIG_CRYPTO_TWOFISH_COMMON) += twofish_common.o + obj-$(CONFIG_CRYPTO_SERPENT) += serpent_generic.o ++CFLAGS_serpent_generic.o := $(call cc-option,-fsched-pressure) # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79149 + obj-$(CONFIG_CRYPTO_AES) += aes_generic.o + obj-$(CONFIG_CRYPTO_CAMELLIA) += camellia_generic.o + obj-$(CONFIG_CRYPTO_CAST_COMMON) += cast_common.o diff --git a/queue-4.9/mips-ip22-fix-ip28-build-for-modern-gcc.patch b/queue-4.9/mips-ip22-fix-ip28-build-for-modern-gcc.patch new file mode 100644 index 00000000000..1f5602fc290 --- /dev/null +++ b/queue-4.9/mips-ip22-fix-ip28-build-for-modern-gcc.patch @@ -0,0 +1,41 @@ +From 23ca9b522383d3b9b7991d8586db30118992af4a Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Tue, 17 Jan 2017 16:18:46 +0100 +Subject: MIPS: ip22: Fix ip28 build for modern gcc + +From: Arnd Bergmann + +commit 23ca9b522383d3b9b7991d8586db30118992af4a upstream. + +kernelci reports a failure of the ip28_defconfig build after upgrading its +gcc version: + +arch/mips/sgi-ip22/Platform:29: *** gcc doesn't support needed option -mr10k-cache-barrier=store. Stop. + +The problem apparently is that the -mr10k-cache-barrier=store option is now +rejected for CPUs other than r10k. Explicitly including the CPU in the +check fixes this and is safe because both options were introduced in +gcc-4.4. + +Signed-off-by: Arnd Bergmann +Cc: linux-mips@linux-mips.org +Cc: linux-kernel@vger.kernel.org +Patchwork: https://patchwork.linux-mips.org/patch/15049/ +Signed-off-by: Ralf Baechle +Signed-off-by: Greg Kroah-Hartman + +--- + arch/mips/sgi-ip22/Platform | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/arch/mips/sgi-ip22/Platform ++++ b/arch/mips/sgi-ip22/Platform +@@ -25,7 +25,7 @@ endif + # Simplified: what IP22 does at 128MB+ in ksegN, IP28 does at 512MB+ in xkphys + # + ifdef CONFIG_SGI_IP28 +- ifeq ($(call cc-option-yn,-mr10k-cache-barrier=store), n) ++ ifeq ($(call cc-option-yn,-march=r10000 -mr10k-cache-barrier=store), n) + $(error gcc doesn't support needed option -mr10k-cache-barrier=store) + endif + endif diff --git a/queue-4.9/mips-ip27-disable-qlge-driver-in-defconfig.patch b/queue-4.9/mips-ip27-disable-qlge-driver-in-defconfig.patch new file mode 100644 index 00000000000..aa9f6b0c2e3 --- /dev/null +++ b/queue-4.9/mips-ip27-disable-qlge-driver-in-defconfig.patch @@ -0,0 +1,45 @@ +From b617649468390713db1515ea79fc772d2eb897a8 Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Fri, 3 Feb 2017 17:43:50 +0100 +Subject: MIPS: ip27: Disable qlge driver in defconfig + +From: Arnd Bergmann + +commit b617649468390713db1515ea79fc772d2eb897a8 upstream. + +One of the last remaining failures in kernelci.org is for a gcc bug: + +drivers/net/ethernet/qlogic/qlge/qlge_main.c:4819:1: error: insn does not satisfy its constraints: +drivers/net/ethernet/qlogic/qlge/qlge_main.c:4819:1: internal compiler error: in extract_constrain_insn, at recog.c:2190 + +This is apparently broken in gcc-6 but fixed in gcc-7, and I cannot +reproduce the problem here. However, it is clear that ip27_defconfig +does not actually need this driver as the platform has only PCI-X but +not PCIe, and the qlge adapter in turn is PCIe-only. + +The driver was originally enabled in 2010 along with lots of other +drivers. + +Fixes: 59d302b342e5 ("MIPS: IP27: Make defconfig useful again.") +Signed-off-by: Arnd Bergmann +Cc: Ralf Baechle +Cc: linux-mips@linux-mips.org +Cc: linux-kernel@vger.kernel.org +Patchwork: https://patchwork.linux-mips.org/patch/15197/ +Signed-off-by: James Hogan +Signed-off-by: Greg Kroah-Hartman + +--- + arch/mips/configs/ip27_defconfig | 1 - + 1 file changed, 1 deletion(-) + +--- a/arch/mips/configs/ip27_defconfig ++++ b/arch/mips/configs/ip27_defconfig +@@ -205,7 +205,6 @@ CONFIG_MLX4_EN=m + # CONFIG_MLX4_DEBUG is not set + CONFIG_TEHUTI=m + CONFIG_BNX2X=m +-CONFIG_QLGE=m + CONFIG_SFC=m + CONFIG_BE2NET=m + CONFIG_LIBERTAS_THINFIRM=m diff --git a/queue-4.9/mips-ralink-cosmetic-change-to-prom_init.patch b/queue-4.9/mips-ralink-cosmetic-change-to-prom_init.patch new file mode 100644 index 00000000000..a3c6a26e9f8 --- /dev/null +++ b/queue-4.9/mips-ralink-cosmetic-change-to-prom_init.patch @@ -0,0 +1,53 @@ +From 9c48568b3692f1a56cbf1935e4eea835e6b185b1 Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Tue, 20 Dec 2016 19:12:46 +0100 +Subject: MIPS: ralink: Cosmetic change to prom_init(). + +From: John Crispin + +commit 9c48568b3692f1a56cbf1935e4eea835e6b185b1 upstream. + +Over the years the code has been changed various times leading to +argc/argv being defined in a different function to where we actually +use the variables. Clean this up by moving them to prom_init_cmdline(). + +Signed-off-by: John Crispin +Cc: linux-mips@linux-mips.org +Patchwork: https://patchwork.linux-mips.org/patch/14902/ +Signed-off-by: Ralf Baechle +Signed-off-by: Greg Kroah-Hartman + +--- + arch/mips/ralink/prom.c | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +--- a/arch/mips/ralink/prom.c ++++ b/arch/mips/ralink/prom.c +@@ -30,8 +30,10 @@ const char *get_system_type(void) + return soc_info.sys_type; + } + +-static __init void prom_init_cmdline(int argc, char **argv) ++static __init void prom_init_cmdline(void) + { ++ int argc; ++ char **argv; + int i; + + pr_debug("prom: fw_arg0=%08x fw_arg1=%08x fw_arg2=%08x fw_arg3=%08x\n", +@@ -60,14 +62,11 @@ static __init void prom_init_cmdline(int + + void __init prom_init(void) + { +- int argc; +- char **argv; +- + prom_soc_init(&soc_info); + + pr_info("SoC Type: %s\n", get_system_type()); + +- prom_init_cmdline(argc, argv); ++ prom_init_cmdline(); + } + + void __init prom_free_prom_memory(void) diff --git a/queue-4.9/mips-ralink-remove-unused-rt-_wdt_reset-functions.patch b/queue-4.9/mips-ralink-remove-unused-rt-_wdt_reset-functions.patch new file mode 100644 index 00000000000..f35d1d64124 --- /dev/null +++ b/queue-4.9/mips-ralink-remove-unused-rt-_wdt_reset-functions.patch @@ -0,0 +1,91 @@ +From 886f9c69fc68f56ddea34d3de51ac1fc2ac8dfbc Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Tue, 17 Jan 2017 16:18:43 +0100 +Subject: MIPS: ralink: Remove unused rt*_wdt_reset functions + +From: Arnd Bergmann + +commit 886f9c69fc68f56ddea34d3de51ac1fc2ac8dfbc upstream. + +All pointers to these functions were removed, so now they produce +warnings: + +arch/mips/ralink/rt305x.c:92:13: error: 'rt305x_wdt_reset' defined but not used [-Werror=unused-function] + +This removes the functions. If we need them again, the patch can be +reverted later. + +Fixes: f576fb6a0700 ("MIPS: ralink: cleanup the soc specific pinmux data") +Signed-off-by: Arnd Bergmann +Cc: John Crispin +Cc: Colin Ian King +Cc: linux-mips@linux-mips.org +Cc: linux-kernel@vger.kernel.org +Patchwork: https://patchwork.linux-mips.org/patch/15044/ +Signed-off-by: Ralf Baechle +Signed-off-by: Greg Kroah-Hartman + +--- + arch/mips/ralink/rt288x.c | 10 ---------- + arch/mips/ralink/rt305x.c | 11 ----------- + arch/mips/ralink/rt3883.c | 10 ---------- + 3 files changed, 31 deletions(-) + +--- a/arch/mips/ralink/rt288x.c ++++ b/arch/mips/ralink/rt288x.c +@@ -40,16 +40,6 @@ static struct rt2880_pmx_group rt2880_pi + { 0 } + }; + +-static void rt288x_wdt_reset(void) +-{ +- u32 t; +- +- /* enable WDT reset output on pin SRAM_CS_N */ +- t = rt_sysc_r32(SYSC_REG_CLKCFG); +- t |= CLKCFG_SRAM_CS_N_WDT; +- rt_sysc_w32(t, SYSC_REG_CLKCFG); +-} +- + void __init ralink_clk_init(void) + { + unsigned long cpu_rate, wmac_rate = 40000000; +--- a/arch/mips/ralink/rt305x.c ++++ b/arch/mips/ralink/rt305x.c +@@ -89,17 +89,6 @@ static struct rt2880_pmx_group rt5350_pi + { 0 } + }; + +-static void rt305x_wdt_reset(void) +-{ +- u32 t; +- +- /* enable WDT reset output on pin SRAM_CS_N */ +- t = rt_sysc_r32(SYSC_REG_SYSTEM_CONFIG); +- t |= RT305X_SYSCFG_SRAM_CS0_MODE_WDT << +- RT305X_SYSCFG_SRAM_CS0_MODE_SHIFT; +- rt_sysc_w32(t, SYSC_REG_SYSTEM_CONFIG); +-} +- + static unsigned long rt5350_get_mem_size(void) + { + void __iomem *sysc = (void __iomem *) KSEG1ADDR(RT305X_SYSC_BASE); +--- a/arch/mips/ralink/rt3883.c ++++ b/arch/mips/ralink/rt3883.c +@@ -63,16 +63,6 @@ static struct rt2880_pmx_group rt3883_pi + { 0 } + }; + +-static void rt3883_wdt_reset(void) +-{ +- u32 t; +- +- /* enable WDT reset output on GPIO 2 */ +- t = rt_sysc_r32(RT3883_SYSC_REG_SYSCFG1); +- t |= RT3883_SYSCFG1_GPIO2_AS_WDT_OUT; +- rt_sysc_w32(t, RT3883_SYSC_REG_SYSCFG1); +-} +- + void __init ralink_clk_init(void) + { + unsigned long cpu_rate, sys_rate; diff --git a/queue-4.9/mips-ralink-remove-unused-timer-functions.patch b/queue-4.9/mips-ralink-remove-unused-timer-functions.patch new file mode 100644 index 00000000000..dbc3ce91115 --- /dev/null +++ b/queue-4.9/mips-ralink-remove-unused-timer-functions.patch @@ -0,0 +1,60 @@ +From d92240d12a9c010e0094bbc9280aae4a6be9a2d5 Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Tue, 17 Jan 2017 16:18:41 +0100 +Subject: MIPS: ralink: Remove unused timer functions + +From: Arnd Bergmann + +commit d92240d12a9c010e0094bbc9280aae4a6be9a2d5 upstream. + +The functions were originally used for the module unload path, +but are not referenced any more and just cause warnings: + +arch/mips/ralink/timer.c:104:13: error: 'rt_timer_disable' defined but not used [-Werror=unused-function] +arch/mips/ralink/timer.c:74:13: error: 'rt_timer_free' defined but not used [-Werror=unused-function] + +Cc: Paul Gortmaker +Fixes: 62ee73d284e7 ("MIPS: ralink: Make timer explicitly non-modular") +Signed-off-by: Arnd Bergmann +Cc: Paul Gortmaker +Cc: John Crispin +Cc: linux-mips@linux-mips.org +Cc: linux-kernel@vger.kernel.org +Patchwork: https://patchwork.linux-mips.org/patch/15041/ +Signed-off-by: Ralf Baechle +Signed-off-by: Greg Kroah-Hartman + +--- + arch/mips/ralink/timer.c | 14 -------------- + 1 file changed, 14 deletions(-) + +--- a/arch/mips/ralink/timer.c ++++ b/arch/mips/ralink/timer.c +@@ -71,11 +71,6 @@ static int rt_timer_request(struct rt_ti + return err; + } + +-static void rt_timer_free(struct rt_timer *rt) +-{ +- free_irq(rt->irq, rt); +-} +- + static int rt_timer_config(struct rt_timer *rt, unsigned long divisor) + { + if (rt->timer_freq < divisor) +@@ -101,15 +96,6 @@ static int rt_timer_enable(struct rt_tim + return 0; + } + +-static void rt_timer_disable(struct rt_timer *rt) +-{ +- u32 t; +- +- t = rt_timer_r32(rt, TIMER_REG_TMR0CTL); +- t &= ~TMR0CTL_ENABLE; +- rt_timer_w32(rt, TIMER_REG_TMR0CTL, t); +-} +- + static int rt_timer_probe(struct platform_device *pdev) + { + struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); diff --git a/queue-4.9/mips-update-defconfigs-for-nf_ct_proto_dccp-udplite-change.patch b/queue-4.9/mips-update-defconfigs-for-nf_ct_proto_dccp-udplite-change.patch new file mode 100644 index 00000000000..200130ba10b --- /dev/null +++ b/queue-4.9/mips-update-defconfigs-for-nf_ct_proto_dccp-udplite-change.patch @@ -0,0 +1,128 @@ +From 9ddc16ad8e0bc7742fc96d5aaabc5b8698512cd1 Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Wed, 11 Jan 2017 15:29:48 +0100 +Subject: MIPS: Update defconfigs for NF_CT_PROTO_DCCP/UDPLITE change + +From: Arnd Bergmann + +commit 9ddc16ad8e0bc7742fc96d5aaabc5b8698512cd1 upstream. + +In linux-4.10-rc, NF_CT_PROTO_UDPLITE and NF_CT_PROTO_DCCP are bool +symbols instead of tristate, and kernelci.org reports a bunch of +warnings for this, like: + +arch/mips/configs/malta_kvm_guest_defconfig:63:warning: symbol value 'm' invalid for NF_CT_PROTO_UDPLITE +arch/mips/configs/malta_defconfig:62:warning: symbol value 'm' invalid for NF_CT_PROTO_DCCP +arch/mips/configs/malta_defconfig:63:warning: symbol value 'm' invalid for NF_CT_PROTO_UDPLITE +arch/mips/configs/ip22_defconfig:70:warning: symbol value 'm' invalid for NF_CT_PROTO_DCCP +arch/mips/configs/ip22_defconfig:71:warning: symbol value 'm' invalid for NF_CT_PROTO_UDPLITE + +This changes all the MIPS defconfigs with these symbols to have them +built-in. + +Fixes: 9b91c96c5d1f ("netfilter: conntrack: built-in support for UDPlite") +Fixes: c51d39010a1b ("netfilter: conntrack: built-in support for DCCP") +Signed-off-by: Arnd Bergmann +Cc: linux-mips@linux-mips.org +Cc: linux-kernel@vger.kernel.org +Patchwork: https://patchwork.linux-mips.org/patch/14999/ +Signed-off-by: Ralf Baechle +Signed-off-by: Greg Kroah-Hartman + +--- + arch/mips/configs/ip22_defconfig | 4 ++-- + arch/mips/configs/malta_defconfig | 4 ++-- + arch/mips/configs/malta_kvm_defconfig | 4 ++-- + arch/mips/configs/malta_kvm_guest_defconfig | 4 ++-- + arch/mips/configs/maltaup_xpa_defconfig | 4 ++-- + arch/mips/configs/nlm_xlp_defconfig | 2 +- + arch/mips/configs/nlm_xlr_defconfig | 2 +- + 7 files changed, 12 insertions(+), 12 deletions(-) + +--- a/arch/mips/configs/ip22_defconfig ++++ b/arch/mips/configs/ip22_defconfig +@@ -67,8 +67,8 @@ CONFIG_NETFILTER_NETLINK_QUEUE=m + CONFIG_NF_CONNTRACK=m + CONFIG_NF_CONNTRACK_SECMARK=y + CONFIG_NF_CONNTRACK_EVENTS=y +-CONFIG_NF_CT_PROTO_DCCP=m +-CONFIG_NF_CT_PROTO_UDPLITE=m ++CONFIG_NF_CT_PROTO_DCCP=y ++CONFIG_NF_CT_PROTO_UDPLITE=y + CONFIG_NF_CONNTRACK_AMANDA=m + CONFIG_NF_CONNTRACK_FTP=m + CONFIG_NF_CONNTRACK_H323=m +--- a/arch/mips/configs/malta_defconfig ++++ b/arch/mips/configs/malta_defconfig +@@ -59,8 +59,8 @@ CONFIG_NETFILTER=y + CONFIG_NF_CONNTRACK=m + CONFIG_NF_CONNTRACK_SECMARK=y + CONFIG_NF_CONNTRACK_EVENTS=y +-CONFIG_NF_CT_PROTO_DCCP=m +-CONFIG_NF_CT_PROTO_UDPLITE=m ++CONFIG_NF_CT_PROTO_DCCP=y ++CONFIG_NF_CT_PROTO_UDPLITE=y + CONFIG_NF_CONNTRACK_AMANDA=m + CONFIG_NF_CONNTRACK_FTP=m + CONFIG_NF_CONNTRACK_H323=m +--- a/arch/mips/configs/malta_kvm_defconfig ++++ b/arch/mips/configs/malta_kvm_defconfig +@@ -60,8 +60,8 @@ CONFIG_NETFILTER=y + CONFIG_NF_CONNTRACK=m + CONFIG_NF_CONNTRACK_SECMARK=y + CONFIG_NF_CONNTRACK_EVENTS=y +-CONFIG_NF_CT_PROTO_DCCP=m +-CONFIG_NF_CT_PROTO_UDPLITE=m ++CONFIG_NF_CT_PROTO_DCCP=y ++CONFIG_NF_CT_PROTO_UDPLITE=y + CONFIG_NF_CONNTRACK_AMANDA=m + CONFIG_NF_CONNTRACK_FTP=m + CONFIG_NF_CONNTRACK_H323=m +--- a/arch/mips/configs/malta_kvm_guest_defconfig ++++ b/arch/mips/configs/malta_kvm_guest_defconfig +@@ -59,8 +59,8 @@ CONFIG_NETFILTER=y + CONFIG_NF_CONNTRACK=m + CONFIG_NF_CONNTRACK_SECMARK=y + CONFIG_NF_CONNTRACK_EVENTS=y +-CONFIG_NF_CT_PROTO_DCCP=m +-CONFIG_NF_CT_PROTO_UDPLITE=m ++CONFIG_NF_CT_PROTO_DCCP=y ++CONFIG_NF_CT_PROTO_UDPLITE=y + CONFIG_NF_CONNTRACK_AMANDA=m + CONFIG_NF_CONNTRACK_FTP=m + CONFIG_NF_CONNTRACK_H323=m +--- a/arch/mips/configs/maltaup_xpa_defconfig ++++ b/arch/mips/configs/maltaup_xpa_defconfig +@@ -61,8 +61,8 @@ CONFIG_NETFILTER=y + CONFIG_NF_CONNTRACK=m + CONFIG_NF_CONNTRACK_SECMARK=y + CONFIG_NF_CONNTRACK_EVENTS=y +-CONFIG_NF_CT_PROTO_DCCP=m +-CONFIG_NF_CT_PROTO_UDPLITE=m ++CONFIG_NF_CT_PROTO_DCCP=y ++CONFIG_NF_CT_PROTO_UDPLITE=y + CONFIG_NF_CONNTRACK_AMANDA=m + CONFIG_NF_CONNTRACK_FTP=m + CONFIG_NF_CONNTRACK_H323=m +--- a/arch/mips/configs/nlm_xlp_defconfig ++++ b/arch/mips/configs/nlm_xlp_defconfig +@@ -110,7 +110,7 @@ CONFIG_NETFILTER=y + CONFIG_NF_CONNTRACK=m + CONFIG_NF_CONNTRACK_SECMARK=y + CONFIG_NF_CONNTRACK_EVENTS=y +-CONFIG_NF_CT_PROTO_UDPLITE=m ++CONFIG_NF_CT_PROTO_UDPLITE=y + CONFIG_NF_CONNTRACK_AMANDA=m + CONFIG_NF_CONNTRACK_FTP=m + CONFIG_NF_CONNTRACK_H323=m +--- a/arch/mips/configs/nlm_xlr_defconfig ++++ b/arch/mips/configs/nlm_xlr_defconfig +@@ -90,7 +90,7 @@ CONFIG_NETFILTER=y + CONFIG_NF_CONNTRACK=m + CONFIG_NF_CONNTRACK_SECMARK=y + CONFIG_NF_CONNTRACK_EVENTS=y +-CONFIG_NF_CT_PROTO_UDPLITE=m ++CONFIG_NF_CT_PROTO_UDPLITE=y + CONFIG_NF_CONNTRACK_AMANDA=m + CONFIG_NF_CONNTRACK_FTP=m + CONFIG_NF_CONNTRACK_H323=m diff --git a/queue-4.9/mips-update-ip27_defconfig-for-scsi_dh-change.patch b/queue-4.9/mips-update-ip27_defconfig-for-scsi_dh-change.patch new file mode 100644 index 00000000000..0249c570bfc --- /dev/null +++ b/queue-4.9/mips-update-ip27_defconfig-for-scsi_dh-change.patch @@ -0,0 +1,39 @@ +From ea58fca1842a5dc410cae4167b01643db971a4e2 Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Wed, 11 Jan 2017 15:29:50 +0100 +Subject: MIPS: Update ip27_defconfig for SCSI_DH change + +From: Arnd Bergmann + +commit ea58fca1842a5dc410cae4167b01643db971a4e2 upstream. + +Since linux-4.3, SCSI_DH is a bool symbol, causing a warning in +kernelci.org: + +arch/mips/configs/ip27_defconfig:136:warning: symbol value 'm' invalid for SCSI_DH + +This updates the defconfig to have the feature built-in. + +Fixes: 086b91d052eb ("scsi_dh: integrate into the core SCSI code") +Signed-off-by: Arnd Bergmann +Cc: linux-mips@linux-mips.org +Cc: linux-kernel@vger.kernel.org +Patchwork: https://patchwork.linux-mips.org/patch/15001/ +Signed-off-by: Ralf Baechle +Signed-off-by: Greg Kroah-Hartman + +--- + arch/mips/configs/ip27_defconfig | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/arch/mips/configs/ip27_defconfig ++++ b/arch/mips/configs/ip27_defconfig +@@ -133,7 +133,7 @@ CONFIG_LIBFC=m + CONFIG_SCSI_QLOGIC_1280=y + CONFIG_SCSI_PMCRAID=m + CONFIG_SCSI_BFA_FC=m +-CONFIG_SCSI_DH=m ++CONFIG_SCSI_DH=y + CONFIG_SCSI_DH_RDAC=m + CONFIG_SCSI_DH_HP_SW=m + CONFIG_SCSI_DH_EMC=m diff --git a/queue-4.9/mips-update-lemote2f_defconfig-for-cpu_freq_stat-change.patch b/queue-4.9/mips-update-lemote2f_defconfig-for-cpu_freq_stat-change.patch new file mode 100644 index 00000000000..8156ca89fea --- /dev/null +++ b/queue-4.9/mips-update-lemote2f_defconfig-for-cpu_freq_stat-change.patch @@ -0,0 +1,39 @@ +From b3f6046186ef45acfeebc5a59c9fb45cefc685e7 Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Wed, 11 Jan 2017 15:29:49 +0100 +Subject: MIPS: Update lemote2f_defconfig for CPU_FREQ_STAT change + +From: Arnd Bergmann + +commit b3f6046186ef45acfeebc5a59c9fb45cefc685e7 upstream. + +Since linux-4.8, CPU_FREQ_STAT is a bool symbol, causing a warning in +kernelci.org: + +arch/mips/configs/lemote2f_defconfig:42:warning: symbol value 'm' invalid for CPU_FREQ_STAT + +This updates the defconfig to have the feature built-in. + +Fixes: 1aefc75b2449 ("cpufreq: stats: Make the stats code non-modular") +Signed-off-by: Arnd Bergmann +Cc: linux-mips@linux-mips.org +Cc: linux-kernel@vger.kernel.org +Patchwork: https://patchwork.linux-mips.org/patch/15000/ +Signed-off-by: Ralf Baechle +Signed-off-by: Greg Kroah-Hartman + +--- + arch/mips/configs/lemote2f_defconfig | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/arch/mips/configs/lemote2f_defconfig ++++ b/arch/mips/configs/lemote2f_defconfig +@@ -39,7 +39,7 @@ CONFIG_HIBERNATION=y + CONFIG_PM_STD_PARTITION="/dev/hda3" + CONFIG_CPU_FREQ=y + CONFIG_CPU_FREQ_DEBUG=y +-CONFIG_CPU_FREQ_STAT=m ++CONFIG_CPU_FREQ_STAT=y + CONFIG_CPU_FREQ_STAT_DETAILS=y + CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y + CONFIG_CPU_FREQ_GOV_POWERSAVE=m diff --git a/queue-4.9/mips-vdso-avoid-duplicate-cac_base-definition.patch b/queue-4.9/mips-vdso-avoid-duplicate-cac_base-definition.patch new file mode 100644 index 00000000000..b69628ccdf2 --- /dev/null +++ b/queue-4.9/mips-vdso-avoid-duplicate-cac_base-definition.patch @@ -0,0 +1,67 @@ +From 1742ac265046f34223e06d5d283496f0291be259 Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Tue, 17 Jan 2017 16:18:36 +0100 +Subject: MIPS: VDSO: avoid duplicate CAC_BASE definition + +From: Arnd Bergmann + +commit 1742ac265046f34223e06d5d283496f0291be259 upstream. + +vdso.h includes implicitly after defining CONFIG_32BITS. +This defeats the override in mach-ip27/spaces.h, leading to +a build error that shows up in kernelci.org: + +In file included from arch/mips/include/asm/mach-ip27/spaces.h:29:0, + from arch/mips/include/asm/page.h:12, + from arch/mips/vdso/vdso.h:26, + from arch/mips/vdso/gettimeofday.c:11: +arch/mips/include/asm/mach-generic/spaces.h:28:0: error: "CAC_BASE" redefined [-Werror] + #define CAC_BASE _AC(0x80000000, UL) + +An earlier patch tried to make the second definition conditional, +but that patch had the #ifdef in the wrong place, and would lead +to another warning: + +arch/mips/include/asm/io.h: In function 'phys_to_virt': +arch/mips/include/asm/io.h:138:9: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast] + +For all I can tell, there is no other reason than vdso32 to ever +include this file with CONFIG_32BITS set, and the vdso itself should +never refer to the base addresses as it is running in user space, +so adding an #ifdef here is safe. + +Link: https://patchwork.kernel.org/patch/9418187/ +Fixes: 3ffc17d8768b ("MIPS: Adjust MIPS64 CAC_BASE to reflect Config.K0") +Signed-off-by: Arnd Bergmann +Cc: Paul Burton +Cc: linux-mips@linux-mips.org +Cc: linux-kernel@vger.kernel.org +Patchwork: https://patchwork.linux-mips.org/patch/15039/ +Signed-off-by: Ralf Baechle +Signed-off-by: Greg Kroah-Hartman + +--- + arch/mips/include/asm/mach-ip27/spaces.h | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +--- a/arch/mips/include/asm/mach-ip27/spaces.h ++++ b/arch/mips/include/asm/mach-ip27/spaces.h +@@ -12,14 +12,16 @@ + + /* + * IP27 uses the R10000's uncached attribute feature. Attribute 3 selects +- * uncached memory addressing. ++ * uncached memory addressing. Hide the definitions on 32-bit compilation ++ * of the compat-vdso code. + */ +- ++#ifdef CONFIG_64BIT + #define HSPEC_BASE 0x9000000000000000 + #define IO_BASE 0x9200000000000000 + #define MSPEC_BASE 0x9400000000000000 + #define UNCAC_BASE 0x9600000000000000 + #define CAC_BASE 0xa800000000000000 ++#endif + + #define TO_MSPEC(x) (MSPEC_BASE | ((x) & TO_PHYS_MASK)) + #define TO_HSPEC(x) (HSPEC_BASE | ((x) & TO_PHYS_MASK)) diff --git a/queue-4.9/mtd-pmcmsp-use-kstrndup-instead-of-kmalloc-strncpy.patch b/queue-4.9/mtd-pmcmsp-use-kstrndup-instead-of-kmalloc-strncpy.patch new file mode 100644 index 00000000000..be6098e26e6 --- /dev/null +++ b/queue-4.9/mtd-pmcmsp-use-kstrndup-instead-of-kmalloc-strncpy.patch @@ -0,0 +1,44 @@ +From 906b268477bc03daaa04f739844c120fe4dbc991 Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Fri, 3 Feb 2017 10:49:17 +0100 +Subject: mtd: pmcmsp: use kstrndup instead of kmalloc+strncpy + +From: Arnd Bergmann + +commit 906b268477bc03daaa04f739844c120fe4dbc991 upstream. + +kernelci.org reports a warning for this driver, as it copies a local +variable into a 'const char *' string: + + drivers/mtd/maps/pmcmsp-flash.c:149:30: warning: passing argument 1 of 'strncpy' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] + +Using kstrndup() simplifies the code and avoids the warning. + +Signed-off-by: Arnd Bergmann +Acked-by: Marek Vasut +Signed-off-by: Brian Norris +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/mtd/maps/pmcmsp-flash.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +--- a/drivers/mtd/maps/pmcmsp-flash.c ++++ b/drivers/mtd/maps/pmcmsp-flash.c +@@ -139,15 +139,13 @@ static int __init init_msp_flash(void) + } + + msp_maps[i].bankwidth = 1; +- msp_maps[i].name = kmalloc(7, GFP_KERNEL); ++ msp_maps[i].name = kstrndup(flash_name, 7, GFP_KERNEL); + if (!msp_maps[i].name) { + iounmap(msp_maps[i].virt); + kfree(msp_parts[i]); + goto cleanup_loop; + } + +- msp_maps[i].name = strncpy(msp_maps[i].name, flash_name, 7); +- + for (j = 0; j < pcnt; j++) { + part_name[5] = '0' + i; + part_name[7] = '0' + j; diff --git a/queue-4.9/series b/queue-4.9/series index e69de29bb2d..98d899cc968 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -0,0 +1,15 @@ +usb-serial-digi_acceleport-fix-oob-data-sanity-check.patch +usb-serial-digi_acceleport-fix-oob-event-processing.patch +crypto-improve-gcc-optimization-flags-for-serpent-and-wp512.patch +mips-update-defconfigs-for-nf_ct_proto_dccp-udplite-change.patch +mips-vdso-avoid-duplicate-cac_base-definition.patch +mips-ip27-disable-qlge-driver-in-defconfig.patch +mips-update-ip27_defconfig-for-scsi_dh-change.patch +mips-ip22-fix-ip28-build-for-modern-gcc.patch +mips-update-lemote2f_defconfig-for-cpu_freq_stat-change.patch +mtd-pmcmsp-use-kstrndup-instead-of-kmalloc-strncpy.patch +mips-ralink-cosmetic-change-to-prom_init.patch +mips-ralink-remove-unused-timer-functions.patch +mips-ralink-remove-unused-rt-_wdt_reset-functions.patch +bcm63xx_enet-avoid-uninitialized-variable-warning.patch +cpmac-remove-hopeless-warning.patch diff --git a/queue-4.9/usb-serial-digi_acceleport-fix-oob-data-sanity-check.patch b/queue-4.9/usb-serial-digi_acceleport-fix-oob-data-sanity-check.patch new file mode 100644 index 00000000000..22c2761720a --- /dev/null +++ b/queue-4.9/usb-serial-digi_acceleport-fix-oob-data-sanity-check.patch @@ -0,0 +1,53 @@ +From 2d380889215fe20b8523345649dee0579821800c Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Tue, 31 Jan 2017 17:17:27 +0100 +Subject: USB: serial: digi_acceleport: fix OOB data sanity check + +From: Johan Hovold + +commit 2d380889215fe20b8523345649dee0579821800c upstream. + +Make sure to check for short transfers to avoid underflow in a loop +condition when parsing the receive buffer. + +Also fix an off-by-one error in the incomplete sanity check which could +lead to invalid data being parsed. + +Fixes: 8c209e6782ca ("USB: make actual_length in struct urb field u32") +Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") +Reviewed-by: Greg Kroah-Hartman +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/digi_acceleport.c | 14 +++++++++----- + 1 file changed, 9 insertions(+), 5 deletions(-) + +--- a/drivers/usb/serial/digi_acceleport.c ++++ b/drivers/usb/serial/digi_acceleport.c +@@ -1482,16 +1482,20 @@ static int digi_read_oob_callback(struct + struct usb_serial *serial = port->serial; + struct tty_struct *tty; + struct digi_port *priv = usb_get_serial_port_data(port); ++ unsigned char *buf = urb->transfer_buffer; + int opcode, line, status, val; + int i; + unsigned int rts; + ++ if (urb->actual_length < 4) ++ return -1; ++ + /* handle each oob command */ +- for (i = 0; i < urb->actual_length - 3;) { +- opcode = ((unsigned char *)urb->transfer_buffer)[i++]; +- line = ((unsigned char *)urb->transfer_buffer)[i++]; +- status = ((unsigned char *)urb->transfer_buffer)[i++]; +- val = ((unsigned char *)urb->transfer_buffer)[i++]; ++ for (i = 0; i < urb->actual_length - 4; i += 4) { ++ opcode = buf[i]; ++ line = buf[i + 1]; ++ status = buf[i + 2]; ++ val = buf[i + 3]; + + dev_dbg(&port->dev, "digi_read_oob_callback: opcode=%d, line=%d, status=%d, val=%d\n", + opcode, line, status, val); diff --git a/queue-4.9/usb-serial-digi_acceleport-fix-oob-event-processing.patch b/queue-4.9/usb-serial-digi_acceleport-fix-oob-event-processing.patch new file mode 100644 index 00000000000..55449ea0ad5 --- /dev/null +++ b/queue-4.9/usb-serial-digi_acceleport-fix-oob-event-processing.patch @@ -0,0 +1,38 @@ +From 2e46565cf622dd0534a9d8bffe152a577b48d7aa Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Fri, 24 Feb 2017 19:11:28 +0100 +Subject: USB: serial: digi_acceleport: fix OOB-event processing + +From: Johan Hovold + +commit 2e46565cf622dd0534a9d8bffe152a577b48d7aa upstream. + +A recent change claimed to fix an off-by-one error in the OOB-port +completion handler, but instead introduced such an error. This could +specifically led to modem-status changes going unnoticed, effectively +breaking TIOCMGET. + +Note that the offending commit fixes a loop-condition underflow and is +marked for stable, but should not be backported without this fix. + +Reported-by: Ben Hutchings +Fixes: 2d380889215f ("USB: serial: digi_acceleport: fix OOB data sanity +check") +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/digi_acceleport.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/usb/serial/digi_acceleport.c ++++ b/drivers/usb/serial/digi_acceleport.c +@@ -1491,7 +1491,7 @@ static int digi_read_oob_callback(struct + return -1; + + /* handle each oob command */ +- for (i = 0; i < urb->actual_length - 4; i += 4) { ++ for (i = 0; i < urb->actual_length - 3; i += 4) { + opcode = buf[i]; + line = buf[i + 1]; + status = buf[i + 2];