Linux 4.19.215
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 19 -SUBLEVEL = 214 +SUBLEVEL = 215 EXTRAVERSION = NAME = "People's Front"
arch/arm/Makefile +1 -1
@@ -10,7 +10,7 @@ # # Copyright (C) 1995-2001 by Russell King -LDFLAGS_vmlinux :=-p --no-undefined -X --pic-veneer +LDFLAGS_vmlinux := --no-undefined -X --pic-veneer ifeq ($(CONFIG_CPU_ENDIAN_BE8),y) LDFLAGS_vmlinux += --be8 KBUILD_LDFLAGS_MODULE += --be8
arch/arm/boot/bootp/Makefile +1 -1
@@ -8,7 +8,7 @@ GCOV_PROFILE := n -LDFLAGS_bootp :=-p --no-undefined -X \ +LDFLAGS_bootp := --no-undefined -X \ --defsym initrd_phys=$(INITRD_PHYS) \ --defsym params_phys=$(PARAMS_PHYS) -T AFLAGS_initrd.o :=-DINITRD=\"$(INITRD)\"
arch/arm/boot/compressed/Makefile +0 -2
@@ -133,8 +133,6 @@ endif ifeq ($(CONFIG_CPU_ENDIAN_BE8),y) LDFLAGS_vmlinux += --be8 endif -# ? -LDFLAGS_vmlinux += -p # Report unresolved symbol references LDFLAGS_vmlinux += --no-undefined # Delete all temporary local symbols
arch/arm/boot/compressed/decompress.c +3 -0
@@ -46,7 +46,10 @@ extern int memcmp(const void *cs, const void *ct, size_t count);#endif #ifdef CONFIG_KERNEL_XZ +/* Prevent KASAN override of string helpers in decompressor */ +#undef memmove#define memmove memmove +#undef memcpy#define memcpy memcpy#include "../../../../lib/decompress_unxz.c" #endif
arch/arm/kernel/vmlinux-xip.lds.S +1 -1
@@ -181,7 +181,7 @@ ASSERT(__hyp_idmap_text_end - (__hyp_idmap_text_start & PAGE_MASK) <= PAGE_SIZE, ASSERT((_end - __bss_start) >= 12288, ".bss too small for CONFIG_XIP_DEFLATED_DATA") #endif -#ifdef CONFIG_ARM_MPU +#if defined(CONFIG_ARM_MPU) && !defined(CONFIG_COMPILE_TEST) /* * Due to PMSAv7 restriction on base address and size we have to * enforce minimal alignment restrictions. It was seen that weaker
arch/arm/mm/proc-macros.S +1 -0
@@ -342,6 +342,7 @@ ENTRY(\name\()_cache_fns) .macro define_tlb_functions name:req, flags_up:req, flags_smp .type \name\()_tlb_fns, #object + .align 2 ENTRY(\name\()_tlb_fns) .long \name\()_flush_user_tlb_range .long \name\()_flush_kern_tlb_range
arch/arm/probes/kprobes/core.c +1 -1
@@ -542,7 +542,7 @@ static struct undef_hook kprobes_arm_break_hook = {#endif /* !CONFIG_THUMB2_KERNEL */ -int __init arch_init_kprobes () +int __init arch_init_kprobes (void ) {arm_probes_decode_init ();#ifdef CONFIG_THUMB2_KERNEL
arch/arm64/boot/dts/allwinner/sun50i-h5-nanopi-neo2.dts +1 -1
@@ -114,7 +114,7 @@ pinctrl-0 = <&emac_rgmii_pins>; phy-supply = <®_gmac_3v3>; phy-handle = <&ext_rgmii_phy>; - phy-mode = "rgmii"; + phy-mode = "rgmii-id"; status = "okay"; };
arch/arm64/lib/copy_from_user.S +10 -3
@@ -39,7 +39,7 @@ .endm .macro ldrh1 ptr, regB, val - uao_user_alternative 9998f, ldrh, ldtrh, \ptr, \regB, \val + uao_user_alternative 9997f, ldrh, ldtrh, \ptr, \regB, \val .endm .macro strh1 ptr, regB, val
@@ -47,7 +47,7 @@ .endm .macro ldr1 ptr, regB, val - uao_user_alternative 9998f, ldr, ldtr, \ptr, \regB, \val + uao_user_alternative 9997f, ldr, ldtr, \ptr, \regB, \val .endm .macro str1 ptr, regB, val
@@ -55,7 +55,7 @@ .endm .macro ldp1 ptr, regB, regC, val - uao_ldp 9998f, \ptr, \regB, \regC, \val + uao_ldp 9997f, \ptr, \regB, \regC, \val .endm .macro stp1 ptr, regB, regC, val
@@ -63,9 +63,11 @@ .endm end .req x5 +srcin .req x15 ENTRY(__arch_copy_from_user) uaccess_enable_not_uao x3, x4, x5 add end, x0, x2 + mov srcin, x1 #include "copy_template.S" uaccess_disable_not_uao x3, x4 mov x0, #0 // Nothing to copy
@@ -74,6 +76,11 @@ ENDPROC(__arch_copy_from_user) .section .fixup,"ax" .align 2 +9997: cmp dst, dstin + b.ne 9998f + // Before being absolutely sure we couldn't copy anything, try harder +USER(9998f, ldtrb tmp1w, [srcin]) + strb tmp1w, [dst], #1 9998: sub x0, end, dst // bytes not copied uaccess_disable_not_uao x3, x4 ret
arch/arm64/lib/copy_in_user.S +14 -6
@@ -40,34 +40,36 @@ .endm .macro ldrh1 ptr, regB, val - uao_user_alternative 9998f, ldrh, ldtrh, \ptr, \regB, \val + uao_user_alternative 9997f, ldrh, ldtrh, \ptr, \regB, \val .endm .macro strh1 ptr, regB, val - uao_user_alternative 9998f, strh, sttrh, \ptr, \regB, \val + uao_user_alternative 9997f, strh, sttrh, \ptr, \regB, \val .endm .macro ldr1 ptr, regB, val - uao_user_alternative 9998f, ldr, ldtr, \ptr, \regB, \val + uao_user_alternative 9997f, ldr, ldtr, \ptr, \regB, \val .endm .macro str1 ptr, regB, val - uao_user_alternative 9998f, str, sttr, \ptr, \regB, \val + uao_user_alternative 9997f, str, sttr, \ptr, \regB, \val .endm .macro ldp1 ptr, regB, regC, val - uao_ldp 9998f, \ptr, \regB, \regC, \val + uao_ldp 9997f, \ptr, \regB, \regC, \val .endm .macro stp1 ptr, regB, regC, val - uao_stp 9998f, \ptr, \regB, \regC, \val + uao_stp 9997f, \ptr, \regB, \regC, \val .endm end .req x5 +srcin .req x15 ENTRY(__arch_copy_in_user) uaccess_enable_not_uao x3, x4, x5 add end, x0, x2 + mov srcin, x1 #include "copy_template.S" uaccess_disable_not_uao x3, x4 mov x0, #0
@@ -76,6 +78,12 @@ ENDPROC(__arch_copy_in_user) .section .fixup,"ax" .align 2 +9997: cmp dst, dstin + b.ne 9998f + // Before being absolutely sure we couldn't copy anything, try harder +USER(9998f, ldtrb tmp1w, [srcin]) +USER(9998f, sttrb tmp1w, [dst]) + add dst, dst, #1 9998: sub x0, end, dst // bytes not copied uaccess_disable_not_uao x3, x4 ret
arch/arm64/lib/copy_to_user.S +11 -3
@@ -42,7 +42,7 @@ .endm .macro strh1 ptr, regB, val - uao_user_alternative 9998f, strh, sttrh, \ptr, \regB, \val + uao_user_alternative 9997f, strh, sttrh, \ptr, \regB, \val .endm .macro ldr1 ptr, regB, val
@@ -50,7 +50,7 @@ .endm .macro str1 ptr, regB, val - uao_user_alternative 9998f, str, sttr, \ptr, \regB, \val + uao_user_alternative 9997f, str, sttr, \ptr, \regB, \val .endm .macro ldp1 ptr, regB, regC, val
@@ -58,13 +58,15 @@ .endm .macro stp1 ptr, regB, regC, val - uao_stp 9998f, \ptr, \regB, \regC, \val + uao_stp 9997f, \ptr, \regB, \regC, \val .endm end .req x5 +srcin .req x15 ENTRY(__arch_copy_to_user) uaccess_enable_not_uao x3, x4, x5 add end, x0, x2 + mov srcin, x1 #include "copy_template.S" uaccess_disable_not_uao x3, x4 mov x0, #0
@@ -73,6 +75,12 @@ ENDPROC(__arch_copy_to_user) .section .fixup,"ax" .align 2 +9997: cmp dst, dstin + b.ne 9998f + // Before being absolutely sure we couldn't copy anything, try harder + ldrb tmp1w, [srcin] +USER(9998f, sttrb tmp1w, [dst]) + add dst, dst, #1 9998: sub x0, end, dst // bytes not copied uaccess_disable_not_uao x3, x4 ret
arch/nios2/platform/Kconfig.platform +1 -0
@@ -37,6 +37,7 @@ config NIOS2_DTB_PHYS_ADDR config NIOS2_DTB_SOURCE_BOOL bool "Compile and link device tree into kernel image" + depends on !COMPILE_TEST default n help This allows you to specify a dts (device tree source) file
arch/powerpc/net/bpf_jit_comp64.c +8 -2
@@ -385,8 +385,14 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image,case BPF_ALU64 |BPF_DIV |BPF_K :/* dst /= imm */ if (imm ==0 )return -EINVAL ; -else if (imm ==1 ) - goto bpf_alu32_trunc; +if (imm ==1 ) { +if (BPF_OP (code) ==BPF_DIV ) { + goto bpf_alu32_trunc; + }else { +PPC_LI (dst_reg,0 ); +break ; + } + }PPC_LI32 (b2p[TMP_REG_1 ], imm);switch (BPF_CLASS (code)) {
drivers/ata/sata_mv.c +2 -2
@@ -3905,8 +3905,8 @@ static int mv_chip_id(struct ata_host *host, unsigned int board_idx)break ;default : -dev_err (host->dev,"BUG: invalid board index %u\n" , board_idx); -return 1 ; +dev_alert (host->dev,"BUG: invalid board index %u\n" , board_idx); +return -EINVAL ; } hpriv->hp_flags = hp_flags;
drivers/base/regmap/regcache-rbtree.c +3 -4
@@ -295,14 +295,14 @@ static int regcache_rbtree_insert_to_block(struct regmap *map,if (!blk)return -ENOMEM ; + rbnode->block = blk; +if (BITS_TO_LONGS (blklen) >BITS_TO_LONGS (rbnode->blklen)) { present =krealloc (rbnode->cache_present,BITS_TO_LONGS (blklen) *sizeof (*present),GFP_KERNEL ); -if (!present) { -kfree (blk); +if (!present)return -ENOMEM ; - }memset (present +BITS_TO_LONGS (rbnode->blklen),0 , (BITS_TO_LONGS(blklen) - BITS_TO_LONGS(rbnode->blklen))
@@ -319,7 +319,6 @@ static int regcache_rbtree_insert_to_block(struct regmap *map, }/* update the rbnode block, its size and the base register */ - rbnode->block = blk; rbnode->blklen = blklen; rbnode->base_reg = base_reg; rbnode->cache_present = present;
drivers/infiniband/hw/mlx5/qp.c +2 -0
@@ -3387,6 +3387,8 @@ static int mlx5_ib_modify_dct(struct ib_qp *ibqp, struct ib_qp_attr *attr,MLX5_SET (dctc, dctc, mtu, attr->path_mtu);MLX5_SET (dctc, dctc, my_addr_index, attr->ah_attr.grh.sgid_index);MLX5_SET (dctc, dctc, hop_limit, attr->ah_attr.grh.hop_limit); +if (attr->ah_attr.type ==RDMA_AH_ATTR_TYPE_ROCE ) +MLX5_SET (dctc, dctc, eth_prio, attr->ah_attr.sl &0x7 ); err =mlx5_core_create_dct (dev->mdev, &qp->dct.mdct, qp->dct.in,MLX5_ST_SZ_BYTES (create_dct_in));
drivers/mmc/host/cqhci.c +3 -0
@@ -281,6 +281,9 @@ static void __cqhci_enable(struct cqhci_host *cq_host)cqhci_writel (cq_host, cqcfg,CQHCI_CFG ); +if (cqhci_readl (cq_host,CQHCI_CTL ) &CQHCI_HALT ) +cqhci_writel (cq_host,0 ,CQHCI_CTL ); + mmc->cqe_on = true;if (cq_host->ops->enable)
drivers/mmc/host/dw_mmc-exynos.c +14 -0
@@ -455,6 +455,18 @@ static s8 dw_mci_exynos_get_best_clksmpl(u8 candiates) } } +/* +* If there is no cadiates value, then it needs to return -EIO. +* If there are candiates values and don't find bset clk sample value, +* then use a first candiates clock sample value. +*/ +for (i =0 ; i < iter; i++) { + __c =ror8 (candiates, i); +if ((__c &0x1 ) ==0x1 ) { + loc = i; + goto out; + } + } out:return loc; }
@@ -485,6 +497,8 @@ static int dw_mci_exynos_execute_tuning(struct dw_mci_slot *slot, u32 opcode) priv->tuned_sample = found; }else { ret = -EIO ; +dev_warn (&mmc->class_dev, +"There is no candiates value about clksmpl!\n" ); }return ret;
drivers/mmc/host/sdhci-esdhc-imx.c +17 -0
@@ -25,6 +25,7 @@#include <linux/pinctrl/consumer.h> #include <linux/platform_data/mmc-esdhc-imx.h> #include <linux/pm_runtime.h> +#include <linux/iopoll.h> #include "sdhci-pltfm.h" #include "sdhci-esdhc.h"
@@ -947,6 +948,7 @@ static void esdhc_reset_tuning(struct sdhci_host *host)struct sdhci_pltfm_host *pltfm_host =sdhci_priv (host);struct pltfm_imx_data *imx_data =sdhci_pltfm_priv (pltfm_host);u32 ctrl; +int ret;/* Reset the tuning circuit */ if (esdhc_is_usdhc (imx_data)) {
@@ -959,7 +961,22 @@ static void esdhc_reset_tuning(struct sdhci_host *host) }else if (imx_data->socdata->flags &ESDHC_FLAG_STD_TUNING ) { ctrl =readl (host->ioaddr +SDHCI_AUTO_CMD_STATUS ); ctrl &= ~ESDHC_MIX_CTRL_SMPCLK_SEL ; + ctrl &= ~ESDHC_MIX_CTRL_EXE_TUNE ;writel (ctrl, host->ioaddr +SDHCI_AUTO_CMD_STATUS ); +/* Make sure ESDHC_MIX_CTRL_EXE_TUNE cleared */ + ret =readl_poll_timeout (host->ioaddr +SDHCI_AUTO_CMD_STATUS , + ctrl, !(ctrl &ESDHC_MIX_CTRL_EXE_TUNE ),1 ,50 ); +if (ret == -ETIMEDOUT ) +dev_warn (mmc_dev (host->mmc), +"Warning! clear execute tuning bit failed\n" ); +/* +* SDHCI_INT_DATA_AVAIL is W1C bit, set this bit will clear the +* usdhc IP internal logic flag execute_tuning_with_clr_buf, which +* will finally make sure the normal data transfer logic correct. +*/ + ctrl =readl (host->ioaddr +SDHCI_INT_STATUS ); + ctrl |=SDHCI_INT_DATA_AVAIL ; +writel (ctrl, host->ioaddr +SDHCI_INT_STATUS ); } } }
drivers/mmc/host/sdhci.c +6 -0
@@ -1578,6 +1578,12 @@ void sdhci_set_power_noreg(struct sdhci_host *host, unsigned char mode,break ;case MMC_VDD_32_33 :case MMC_VDD_33_34 : +/* +* 3.4 ~ 3.6V are valid only for those platforms where it's +* known that the voltage range is supported by hardware. +*/ +case MMC_VDD_34_35 : +case MMC_VDD_35_36 : pwr =SDHCI_POWER_330 ;break ;default :
drivers/mmc/host/vub300.c +9 -9
@@ -579,7 +579,7 @@ static void check_vub300_port_status(struct vub300_mmc_host *vub300)GET_SYSTEM_PORT_STATUS ,USB_DIR_IN |USB_TYPE_VENDOR |USB_RECIP_DEVICE ,0x0000 ,0x0000 , &vub300->system_port_status, - sizeof(vub300->system_port_status), HZ); + sizeof(vub300->system_port_status), 1000);if (sizeof (vub300->system_port_status) == retval)new_system_port_status (vub300); }
@@ -1244,7 +1244,7 @@ static void __download_offload_pseudocode(struct vub300_mmc_host *vub300,SET_INTERRUPT_PSEUDOCODE ,USB_DIR_OUT |USB_TYPE_VENDOR |USB_RECIP_DEVICE ,0x0000 ,0x0000 , - xfer_buffer, xfer_length, HZ); + xfer_buffer, xfer_length, 1000);kfree (xfer_buffer);if (retval <0 ) goto copy_error_message;
@@ -1287,7 +1287,7 @@ static void __download_offload_pseudocode(struct vub300_mmc_host *vub300,SET_TRANSFER_PSEUDOCODE ,USB_DIR_OUT |USB_TYPE_VENDOR |USB_RECIP_DEVICE ,0x0000 ,0x0000 , - xfer_buffer, xfer_length, HZ); + xfer_buffer, xfer_length, 1000);kfree (xfer_buffer);if (retval <0 ) goto copy_error_message;
@@ -1994,7 +1994,7 @@ static void __set_clock_speed(struct vub300_mmc_host *vub300, u8 buf[8],usb_control_msg (vub300->udev,usb_sndctrlpipe (vub300->udev,0 ),SET_CLOCK_SPEED ,USB_DIR_OUT |USB_TYPE_VENDOR |USB_RECIP_DEVICE , -0x00 ,0x00 , buf, buf_array_size,HZ ); +0x00 ,0x00 , buf, buf_array_size,1000 );if (retval !=8 ) {dev_err (&vub300->udev->dev,"SET_CLOCK_SPEED" " %dkHz failed with retval=%d\n" , kHzClock, retval);
@@ -2016,14 +2016,14 @@ static void vub300_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)usb_control_msg (vub300->udev,usb_sndctrlpipe (vub300->udev,0 ),SET_SD_POWER ,USB_DIR_OUT |USB_TYPE_VENDOR |USB_RECIP_DEVICE , -0x0000 ,0x0000 ,NULL ,0 ,HZ ); +0x0000 ,0x0000 ,NULL ,0 ,1000 );/* must wait for the VUB300 u-proc to boot up */ msleep (600 ); }else if ((ios->power_mode ==MMC_POWER_UP ) && !vub300->card_powered) {usb_control_msg (vub300->udev,usb_sndctrlpipe (vub300->udev,0 ),SET_SD_POWER ,USB_DIR_OUT |USB_TYPE_VENDOR |USB_RECIP_DEVICE , -0x0001 ,0x0000 ,NULL ,0 ,HZ ); +0x0001 ,0x0000 ,NULL ,0 ,1000 );msleep (600 ); vub300->card_powered =1 ; }else if (ios->power_mode ==MMC_POWER_ON ) {
@@ -2285,14 +2285,14 @@ static int vub300_probe(struct usb_interface *interface,GET_HC_INF0 ,USB_DIR_IN |USB_TYPE_VENDOR |USB_RECIP_DEVICE ,0x0000 ,0x0000 , &vub300->hc_info, - sizeof(vub300->hc_info), HZ); + sizeof(vub300->hc_info), 1000);if (retval <0 ) goto error5; retval =usb_control_msg (vub300->udev,usb_sndctrlpipe (vub300->udev,0 ),SET_ROM_WAIT_STATES ,USB_DIR_OUT |USB_TYPE_VENDOR |USB_RECIP_DEVICE , - firmware_rom_wait_states,0x0000 ,NULL ,0 ,HZ ); + firmware_rom_wait_states,0x0000 ,NULL ,0 ,1000 );if (retval <0 ) goto error5; dev_info(&vub300->udev->dev,
@@ -2307,7 +2307,7 @@ static int vub300_probe(struct usb_interface *interface,GET_SYSTEM_PORT_STATUS ,USB_DIR_IN |USB_TYPE_VENDOR |USB_RECIP_DEVICE ,0x0000 ,0x0000 , &vub300->system_port_status, - sizeof(vub300->system_port_status), HZ); + sizeof(vub300->system_port_status), 1000);if (retval <0 ) { goto error4; }else if (sizeof (vub300->system_port_status) == retval) {
drivers/net/ethernet/microchip/lan743x_main.c +22 -0
@@ -1710,6 +1710,16 @@ static int lan743x_tx_ring_init(struct lan743x_tx *tx) ret = -EINVAL ; goto cleanup; } +if (dma_set_mask_and_coherent (&tx->adapter->pdev->dev, +DMA_BIT_MASK (64 ))) { +if (dma_set_mask_and_coherent (&tx->adapter->pdev->dev, +DMA_BIT_MASK (32 ))) { +dev_warn (&tx->adapter->pdev->dev, +"lan743x_: No suitable DMA available\n" ); + ret = -ENOMEM ; + goto cleanup; + } + } ring_allocation_size =ALIGN (tx->ring_size *sizeof (struct lan743x_tx_descriptor ),PAGE_SIZE );
@@ -2258,6 +2268,16 @@ static int lan743x_rx_ring_init(struct lan743x_rx *rx) ret = -EINVAL ; goto cleanup; } +if (dma_set_mask_and_coherent (&rx->adapter->pdev->dev, +DMA_BIT_MASK (64 ))) { +if (dma_set_mask_and_coherent (&rx->adapter->pdev->dev, +DMA_BIT_MASK (32 ))) { +dev_warn (&rx->adapter->pdev->dev, +"lan743x_: No suitable DMA available\n" ); + ret = -ENOMEM ; + goto cleanup; + } + } ring_allocation_size =ALIGN (rx->ring_size *sizeof (struct lan743x_rx_descriptor ),PAGE_SIZE );
@@ -3003,6 +3023,8 @@ static int lan743x_pm_resume(struct device *dev)if (ret) {netif_err (adapter, probe, adapter->netdev,"lan743x_hardware_init returned %d\n" , ret); +lan743x_pci_cleanup (adapter); +return ret; }/* open netdev when netdev is at running state while resume.
drivers/net/ethernet/nxp/lpc_eth.c +2 -3
@@ -1037,9 +1037,6 @@ static int lpc_eth_close(struct net_device *ndev)napi_disable (&pldat->napi);netif_stop_queue (ndev); -if (ndev->phydev) -phy_stop (ndev->phydev); -spin_lock_irqsave (&pldat->lock, flags);__lpc_eth_reset (pldat);netif_carrier_off (ndev);
@@ -1047,6 +1044,8 @@ static int lpc_eth_close(struct net_device *ndev)writel (0 ,LPC_ENET_MAC2 (pldat->net_base));spin_unlock_irqrestore (&pldat->lock, flags); +if (ndev->phydev) +phy_stop (ndev->phydev);clk_disable_unprepare (pldat->clk);return 0 ;
drivers/net/phy/mdio_bus.c +0 -1
@@ -388,7 +388,6 @@ int __mdiobus_register(struct mii_bus *bus, struct module *owner) err =device_register (&bus->dev);if (err) {pr_err ("mii_bus %s failed to register\n" , bus->id); -put_device (&bus->dev);return -EINVAL ; }
drivers/net/usb/lan78xx.c +6 -0
@@ -3772,6 +3772,12 @@ static int lan78xx_probe(struct usb_interface *intf, dev->maxpacket =usb_maxpacket (dev->udev, dev->pipe_out,1 ); +/* Reject broken descriptors. */ +if (dev->maxpacket ==0 ) { + ret = -ENODEV ; + goto out4; + } +/* driver requires remote-wakeup capability during autosuspend. */ intf->needs_remote_wakeup =1 ;
drivers/net/usb/usbnet.c +5 -0
@@ -1784,6 +1784,11 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)if (!dev->rx_urb_size) dev->rx_urb_size = dev->hard_mtu; dev->maxpacket =usb_maxpacket (dev->udev, dev->out,1 ); +if (dev->maxpacket ==0 ) { +/* that is a broken device */ + status = -ENODEV ; + goto out4; + }/* let userspace know we have a random address */ if (ether_addr_equal (net->dev_addr, node_id))
drivers/nfc/port100.c +2 -2
@@ -1012,11 +1012,11 @@ static u64 port100_get_command_type_mask(struct port100 *dev) skb =port100_alloc_skb (dev,0 );if (!skb) -return -ENOMEM ; +return 0 ; resp =port100_send_cmd_sync (dev,PORT100_CMD_GET_COMMAND_TYPE , skb);if (IS_ERR (resp)) -return PTR_ERR (resp); +return 0 ;if (resp->len <8 ) mask =0 ;
net/batman-adv/bridge_loop_avoidance.c +6 -2
@@ -1574,10 +1574,14 @@ int batadv_bla_init(struct batadv_priv *bat_priv)return 0 ; bat_priv->bla.claim_hash =batadv_hash_new (128 ); - bat_priv->bla.backbone_hash =batadv_hash_new (32 ); +if (!bat_priv->bla.claim_hash) +return -ENOMEM ; -if (!bat_priv->bla.claim_hash || !bat_priv->bla.backbone_hash) + bat_priv->bla.backbone_hash =batadv_hash_new (32 ); +if (!bat_priv->bla.backbone_hash) { +batadv_hash_destroy (bat_priv->bla.claim_hash);return -ENOMEM ; + }batadv_hash_set_lock_class (bat_priv->bla.claim_hash, &batadv_claim_hash_lock_class_key);
net/batman-adv/main.c +40 -16
77 lines not on this page · raw message
net/batman-adv/network-coding.c +3 -1
@@ -167,8 +167,10 @@ int batadv_nc_mesh_init(struct batadv_priv *bat_priv) &batadv_nc_coding_hash_lock_class_key); bat_priv->nc.decoding_hash =batadv_hash_new (128 ); -if (!bat_priv->nc.decoding_hash) +if (!bat_priv->nc.decoding_hash) { +batadv_hash_destroy (bat_priv->nc.coding_hash); goto err; + }batadv_hash_set_lock_class (bat_priv->nc.decoding_hash, &batadv_nc_decoding_hash_lock_class_key);
net/batman-adv/translation-table.c +3 -1
@@ -4413,8 +4413,10 @@ int batadv_tt_init(struct batadv_priv *bat_priv)return ret; ret =batadv_tt_global_init (bat_priv); -if (ret <0 ) +if (ret <0 ) { +batadv_tt_local_table_free (bat_priv);return ret; + } batadv_tvlv_handler_register(bat_priv, batadv_tt_tvlv_ogm_handler_v1, batadv_tt_tvlv_unicast_handler_v1,
net/core/dev.c +6 -0
@@ -2846,6 +2846,12 @@ static u16 skb_tx_hash(const struct net_device *dev, qoffset = sb_dev->tc_to_txq[tc].offset; qcount = sb_dev->tc_to_txq[tc].count; +if (unlikely (!qcount)) { +net_warn_ratelimited ("%s: invalid qcount, qoffset %u for tc %u\n" , + sb_dev->name, qoffset, tc); + qoffset =0 ; + qcount = dev->real_num_tx_queues; + } }if (skb_rx_queue_recorded (skb)) {
net/ipv4/route.c +6 -6
@@ -625,14 +625,14 @@ static void fnhe_remove_oldest(struct fnhe_hash_bucket *hash)kfree_rcu (oldest, rcu); } -static inline u32 fnhe_hashfun (__be32 daddr) +static u32 fnhe_hashfun (__be32 daddr) { -static u32 fnhe_hashrnd__read_mostly ; -u32 hval; +static siphash_key_t fnhe_hash_key__read_mostly ; +u64 hval; -net_get_random_once (&fnhe_hashrnd,sizeof (fnhe_hashrnd)); - hval =jhash_1word ((__force u32 ) daddr, fnhe_hashrnd); -return hash_32 (hval,FNHE_HASH_SHIFT ); +net_get_random_once (&fnhe_hash_key,sizeof (fnhe_hash_key)); + hval =siphash_1u32 ((__force u32 )daddr, &fnhe_hash_key); +return hash_64 (hval,FNHE_HASH_SHIFT ); }static void fill_route_from_fnhe (struct rtable *rt,struct fib_nh_exception *fnhe)
net/ipv6/route.c +18 -7
@@ -45,6 +45,7 @@#include <linux/nsproxy.h> #include <linux/slab.h> #include <linux/jhash.h> +#include <linux/siphash.h> #include <net/net_namespace.h> #include <net/snmp.h> #include <net/ipv6.h>
@@ -1337,17 +1338,24 @@ static void rt6_exception_remove_oldest(struct rt6_exception_bucket *bucket)static u32 rt6_exception_hash (const struct in6_addr *dst,const struct in6_addr *src) { -static u32 seed__read_mostly ; -u32 val; +static siphash_key_t rt6_exception_key__read_mostly ; +struct { +struct in6_addr dst; +struct in6_addr src; + }__aligned(SIPHASH_ALIGNMENT) combined = { + .dst = *dst, + }; +u64 val; -net_get_random_once (&seed,sizeof (seed)); - val =jhash (dst,sizeof (*dst), seed); +net_get_random_once (&rt6_exception_key,sizeof (rt6_exception_key));#ifdef CONFIG_IPV6_SUBTREES if (src) - val =jhash (src,sizeof (*src), val); + combined.src = *src;#endif -return hash_32 (val,FIB6_EXCEPTION_BUCKET_SIZE_SHIFT ); + val =siphash (&combined,sizeof (combined), &rt6_exception_key); + +return hash_64 (val,FIB6_EXCEPTION_BUCKET_SIZE_SHIFT ); }/* Helper function to find the cached rt in the hash table
@@ -1446,6 +1454,7 @@ static int rt6_insert_exception(struct rt6_info *nrt,struct rt6_exception_bucket *bucket;struct in6_addr *src_key =NULL ;struct rt6_exception *rt6_ex; +int max_depth;int err =0 ;spin_lock_bh (&rt6_exception_lock);
@@ -1507,7 +1516,9 @@ static int rt6_insert_exception(struct rt6_info *nrt, bucket->depth++; net->ipv6.rt6_stats->fib_rt_cache++; -if (bucket->depth >FIB6_MAX_DEPTH ) +/* Randomize max depth to avoid some side channels attacks. */ + max_depth =FIB6_MAX_DEPTH +prandom_u32_max (FIB6_MAX_DEPTH ); +while (bucket->depth > max_depth)rt6_exception_remove_oldest (bucket); out:
net/sctp/sm_statefuns.c +20 -10
@@ -712,6 +712,9 @@ enum sctp_disposition sctp_sf_do_5_1D_ce(struct net *net,struct sock *sk;int error =0 ; +if (asoc && !sctp_vtag_verify (chunk, asoc)) +return sctp_sf_pdiscard (net, ep, asoc, type, arg, commands); +/* If the packet is an OOTB packet which is temporarily on the * control endpoint, respond with an ABORT. */
@@ -726,7 +729,8 @@ enum sctp_disposition sctp_sf_do_5_1D_ce(struct net *net,* in sctp_unpack_cookie(). */ if (!sctp_chunk_length_valid (chunk,sizeof (struct sctp_chunkhdr ))) -return sctp_sf_pdiscard (net, ep, asoc, type, arg, commands); +return sctp_sf_violation_chunklen (net, ep, asoc, type, arg, + commands);/* If the endpoint is not listening or if the number of associations * on the TCP-style socket exceed the max backlog, respond with an
@@ -2156,9 +2160,11 @@ enum sctp_disposition sctp_sf_do_5_2_4_dupcook(* enough for the chunk header. Cookie length verification is * done later. */ -if (!sctp_chunk_length_valid (chunk,sizeof (struct sctp_chunkhdr ))) -return sctp_sf_violation_chunklen (net, ep, asoc, type, arg, - commands); +if (!sctp_chunk_length_valid (chunk,sizeof (struct sctp_chunkhdr ))) { +if (!sctp_vtag_verify (chunk, asoc)) + asoc =NULL ; +return sctp_sf_violation_chunklen (net, ep, asoc, type, arg, commands); + }/* "Decode" the chunk. We have no optional parameters so we * are in good shape.
@@ -3577,6 +3583,9 @@ enum sctp_disposition sctp_sf_ootb(struct net *net,SCTP_INC_STATS (net,SCTP_MIB_OUTOFBLUES ); +if (asoc && !sctp_vtag_verify (chunk, asoc)) + asoc =NULL ; + ch = (struct sctp_chunkhdr *)chunk->chunk_hdr; do { /* Report violation if the chunk is less then minimal */
@@ -3692,12 +3701,6 @@ static enum sctp_disposition sctp_sf_shut_8_4_5(SCTP_INC_STATS (net,SCTP_MIB_OUTCTRLCHUNKS ); -/* If the chunk length is invalid, we don't want to process -* the reset of the packet. -*/ -if (!sctp_chunk_length_valid (chunk,sizeof (struct sctp_chunkhdr ))) -return sctp_sf_pdiscard (net, ep, asoc, type, arg, commands); -/* We need to discard the rest of the packet to prevent * potential bomming attacks from additional bundled chunks. * This is documented in SCTP Threats ID.
@@ -3725,6 +3728,9 @@ enum sctp_disposition sctp_sf_do_8_5_1_E_sa(struct net *net, {struct sctp_chunk *chunk = arg; +if (!sctp_vtag_verify (chunk, asoc)) + asoc =NULL ; +/* Make sure that the SHUTDOWN_ACK chunk has a valid length. */ if (!sctp_chunk_length_valid (chunk,sizeof (struct sctp_chunkhdr ))) return sctp_sf_violation_chunklen(net, ep, asoc, type, arg,
@@ -4555,6 +4561,9 @@ enum sctp_disposition sctp_sf_violation(struct net *net, {struct sctp_chunk *chunk = arg; +if (!sctp_vtag_verify (chunk, asoc)) +return sctp_sf_pdiscard (net, ep, asoc, type, arg, commands); +/* Make sure that the chunk has a valid length. */ if (!sctp_chunk_length_valid (chunk,sizeof (struct sctp_chunkhdr ))) return sctp_sf_violation_chunklen(net, ep, asoc, type, arg,
@@ -6261,6 +6270,7 @@ static struct sctp_packet *sctp_ootb_pkt_new(* yet. */ switch (chunk->chunk_hdr->type) { +case SCTP_CID_INIT :case SCTP_CID_INIT_ACK : {struct sctp_initack_chunk *initack;
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.19.215 kernel.
All users of the 4.19 kernel series must upgrade.
The updated 4.19.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.19.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm/Makefile | 2 arch/arm/boot/bootp/Makefile | 2 arch/arm/boot/compressed/Makefile | 2 arch/arm/boot/compressed/decompress.c | 3 arch/arm/kernel/vmlinux-xip.lds.S | 2 arch/arm/mm/proc-macros.S | 1 arch/arm/probes/kprobes/core.c | 2 arch/arm64/boot/dts/allwinner/sun50i-h5-nanopi-neo2.dts | 2 arch/arm64/lib/copy_from_user.S | 13 ++- arch/arm64/lib/copy_in_user.S | 20 ++++- arch/arm64/lib/copy_to_user.S | 14 +++- arch/nios2/platform/Kconfig.platform | 1 arch/powerpc/net/bpf_jit_comp64.c | 10 ++ drivers/ata/sata_mv.c | 4 - drivers/base/regmap/regcache-rbtree.c | 7 -- drivers/infiniband/hw/mlx5/qp.c | 2 drivers/mmc/host/cqhci.c | 3 drivers/mmc/host/dw_mmc-exynos.c | 14 ++++ drivers/mmc/host/sdhci-esdhc-imx.c | 17 ++++ drivers/mmc/host/sdhci.c | 6 + drivers/mmc/host/vub300.c | 18 ++--- drivers/net/ethernet/microchip/lan743x_main.c | 22 ++++++ drivers/net/ethernet/nxp/lpc_eth.c | 5 - drivers/net/phy/mdio_bus.c | 1 drivers/net/usb/lan78xx.c | 6 + drivers/net/usb/usbnet.c | 5 + drivers/nfc/port100.c | 4 - net/batman-adv/bridge_loop_avoidance.c | 8 +- net/batman-adv/main.c | 56 +++++++++++----- net/batman-adv/network-coding.c | 4 - net/batman-adv/translation-table.c | 4 - net/core/dev.c | 6 + net/ipv4/route.c | 12 +-- net/ipv6/route.c | 25 +++++-- net/sctp/sm_statefuns.c | 30 +++++--- 36 files changed, 249 insertions(+), 86 deletions(-)
Arnd Bergmann (3):
ARM: 9134/1: remove duplicate memcpy() definition
ARM: 9139/1: kprobes: fix arch_init_kprobes() prototype
ARM: 9141/1: only warn about XIP address when not compile testing
Clément Bœsch (1):
arm64: dts: allwinner: h5: NanoPI Neo 2: Fix ethernet node
Eric Dumazet (3):
ipv4: use siphash instead of Jenkins in fnhe_hashfun()
ipv6: use siphash in rt6_exception_hash()
ipv6: make exception cache less predictible
Greg Kroah-Hartman (1):
Linux 4.19.215
Guenter Roeck (1):
nios2: Make NIOS2_DTB_SOURCE_BOOL depend on !COMPILE_TEST
Haibo Chen (1):
mmc: sdhci-esdhc-imx: clear the buffer_read_ready to reset standard tuning circuit
Jaehoon Chung (1):
mmc: dw_mmc: exynos: fix the finding clock sample value
Johan Hovold (2):
mmc: vub300: fix control-message timeouts
net: lan78xx: fix division by zero in send path
Krzysztof Kozlowski (1):
nfc: port100: fix using -ERRNO as command type mask
Michael Chan (1):
net: Prevent infinite while loop in skb_tx_hash()
Nathan Chancellor (1):
ARM: 8819/1: Remove '-p' from LDFLAGS
Naveen N. Rao (1):
powerpc/bpf: Fix BPF_MOD when imm == 1
Nick Desaulniers (1):
ARM: 9133/1: mm: proc-macros: ensure *_tlb_fns are 4B aligned
Oliver Neukum (1):
usbnet: sanity check for maxpacket
Patrisious Haddad (1):
RDMA/mlx5: Set user priority for DCT
Pavel Skripkin (2):
Revert "net: mdiobus: Fix memory leak in __mdiobus_register"
net: batman-adv: fix error handling
Robin Murphy (1):
arm64: Avoid premature usercopy failure
Shawn Guo (1):
mmc: sdhci: Map more voltage level to SDHCI_POWER_330
Trevor Woerner (1):
net: nxp: lpc_eth.c: avoid hang when bringing interface down
Wang Hai (1):
usbnet: fix error return code in usbnet_probe()
Wenbin Mei (1):
mmc: cqhci: clear HALT state after CQE enable
Xin Long (5):
sctp: use init_tag from inithdr for ABORT chunk
sctp: fix the processing for COOKIE_ECHO chunk
sctp: add vtag check in sctp_sf_violation
sctp: add vtag check in sctp_sf_do_8_5_1_E_sa
sctp: add vtag check in sctp_sf_ootb
Yang Yingliang (1):
regmap: Fix possible double-free in regcache_rbtree_exit()
Yuiko Oshino (2):
net: ethernet: microchip: lan743x: Fix driver crash when lan743x_pm_resume fails
net: ethernet: microchip: lan743x: Fix dma allocation failure by using dma_set_mask_and_coherent
Zheyu Ma (1):
ata: sata_mv: Fix the error handling of mv_chip_id()