Linux 4.14.216
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.14.216 kernel.
All users of the 4.14 kernel series must upgrade.
The updated 4.14.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.14.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/mach-omap2/omap_device.c | 8 + arch/arm64/kvm/sys_regs.c | 4 arch/powerpc/include/asm/book3s/32/pgtable.h | 4 arch/powerpc/include/asm/nohash/pgtable.h | 4 arch/x86/kernel/cpu/intel_rdt_rdtgroup.c | 110 ++++++++++-------------- block/genhd.c | 9 + drivers/block/Kconfig | 1 drivers/cpufreq/powernow-k8.c | 9 - drivers/dma/xilinx/xilinx_dma.c | 8 + drivers/gpu/drm/i915/i915_gem_execbuffer.c | 2 drivers/i2c/busses/i2c-sprd.c | 8 + drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c | 26 ++++- drivers/iommu/intel_irq_remapping.c | 2 drivers/net/ethernet/mellanox/mlx5/core/en_fs.c | 3 drivers/net/usb/cdc_ncm.c | 8 + drivers/net/wan/Kconfig | 1 drivers/net/wireless/ath/wil6210/Kconfig | 1 drivers/spi/spi-pxa2xx.c | 3 drivers/spi/spi-stm32.c | 4 fs/ubifs/io.c | 13 ++ include/asm-generic/vmlinux.lds.h | 5 - net/8021q/vlan.c | 3 net/core/skbuff.c | 6 + net/ipv4/ip_output.c | 2 net/ipv4/ip_tunnel.c | 10 +- 26 files changed, 152 insertions(+), 104 deletions(-)
Andreas Kemnade (1):
ARM: OMAP2+: omap_device: fix idling of devices during probe
Arnd Bergmann (3):
wil6210: select CONFIG_CRC32
block: rsxx: select CONFIG_CRC32
wan: ds26522: select CONFIG_BITREVERSE
Chris Wilson (1):
drm/i915: Fix mismatch between misplaced vma check and vma insert
Chunyan Zhang (1):
i2c: sprd: use a specific timeout to avoid system hang up issue
Colin Ian King (1):
cpufreq: powernow-k8: pass policy rather than use cpufreq_cpu_get()
Dinghao Liu (3):
iommu/intel: Fix memleak in intel_irq_remapping_alloc net/mlx5e: Fix memleak in mlx5e_create_l2_table_groups net/mlx5e: Fix two double free cases
Fenghua Yu (2):
x86/resctrl: Use an IPI instead of task_work_add() to update PQR_ASSOC MSR x86/resctrl: Don't move a task to the same resource group
Florian Westphal (2):
net: ip: always refragment ip defragmented packets
net: fix pmtu check in nopmtudisc mode
Greg Kroah-Hartman (1):
Linux 4.14.216
Jakub Kicinski (1):
net: vlan: avoid leaks on register_vlan_dev() failures
Jouni K. Seppänen (1):
net: cdc_ncm: correct overhead in delayed_ndp_size
Lorenzo Bianconi (1):
iio: imu: st_lsm6dsx: fix edge-trigger interrupts
Lukas Wunner (1):
spi: pxa2xx: Fix use-after-free on unbind
Marc Zyngier (1):
KVM: arm64: Don't access PMCR_EL0 when no PMU is available
Mathieu Desnoyers (1):
powerpc: Fix incorrect stw{, ux, u, x} instructions in __set_pte_at
Ming Lei (1):
block: fix use-after-free in disk_part_iter_next
Nick Desaulniers (1):
vmlinux.lds.h: Add PGO and AutoFDO input sections
Richard Weinberger (1):
ubifs: wbuf: Don't leak kernel memory to flash
Roman Guskov (1):
spi: stm32: FIFO threshold level - fix align packet size
Sean Nyekjaer (1):
iio: imu: st_lsm6dsx: flip irq return logic
Shravya Kumbham (2):
dmaengine: xilinx_dma: check dma_async_device_register return value
dmaengine: xilinx_dma: fix mixed_enum_type coverity warning
Vasily Averin (1):
net: drop bogus skb with CHECKSUM_PARTIAL and offset beyond end of trimmed packet
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 14 -SUBLEVEL = 215 +SUBLEVEL = 216 EXTRAVERSION = NAME = Petit Gorille
arch/arm/mach-omap2/omap_device.c +5 -3
@@ -224,10 +224,12 @@ static int _omap_device_notifier_call(struct notifier_block *nb,break ;case BUS_NOTIFY_BIND_DRIVER : od =to_omap_device (pdev); -if (od && (od->_state ==OMAP_DEVICE_STATE_ENABLED ) && -pm_runtime_status_suspended (dev)) { +if (od) { od->_driver_status =BUS_NOTIFY_BIND_DRIVER ; -pm_runtime_set_active (dev); +if (od->_state ==OMAP_DEVICE_STATE_ENABLED && +pm_runtime_status_suspended (dev)) { +pm_runtime_set_active (dev); + } }break ;case BUS_NOTIFY_ADD_DEVICE :
arch/arm64/kvm/sys_regs.c +4 -0
@@ -470,6 +470,10 @@ static void reset_pmcr(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r) {u64 pmcr, val; +/* No PMU available, PMCR_EL0 may UNDEF... */ +if (!kvm_arm_support_pmu_v3 ()) +return ; + pmcr =read_sysreg (pmcr_el0);/* * Writable bits of PMCR_EL0 (ARMV8_PMU_PMCR_MASK) are reset to UNKNOWN
arch/powerpc/include/asm/book3s/32/pgtable.h +2 -2
@@ -414,9 +414,9 @@ static inline void __set_pte_at(struct mm_struct *mm, unsigned long addr,if (pte_val (*ptep) & _PAGE_HASHPTE)flush_hash_entry (mm, ptep, addr); __asm__ __volatile__("\ -stw%U0%X0 %2,%0\n\ +stw%X0 %2,%0\n\ eieio\n\ -stw%U0%X0 %L2,%1" +stw%X1 %L2,%1" :"=m" (*ptep),"=m" (*((unsigned char *)ptep+4 )) :"r" (pte) :"memory" );
arch/powerpc/include/asm/nohash/pgtable.h +2 -2
@@ -157,9 +157,9 @@ static inline void __set_pte_at(struct mm_struct *mm, unsigned long addr,flush_hash_entry (mm, ptep, addr);#endif __asm__ __volatile__("\ -stw%U0%X0 %2,%0\n\ +stw%X0 %2,%0\n\ eieio\n\ -stw%U0%X0 %L2,%1" +stw%X1 %L2,%1" :"=m" (*ptep),"=m" (*((unsigned char *)ptep+4 )) :"r" (pte) :"memory" );
arch/x86/kernel/cpu/intel_rdt_rdtgroup.c +48 -62
130 lines not on this page · raw message
block/genhd.c +6 -3
@@ -208,14 +208,17 @@ struct hd_struct *disk_part_iter_next(struct disk_part_iter *piter) part =rcu_dereference (ptbl->part[piter->idx]);if (!part)continue ; +get_device (part_to_dev (part)); + piter->part = part;if (!part_nr_sects_read (part) && !(piter->flags &DISK_PITER_INCL_EMPTY ) && !(piter->flags &DISK_PITER_INCL_EMPTY_PART0 && - piter->idx ==0 )) + piter->idx ==0 )) { +put_device (part_to_dev (part)); + piter->part =NULL ;continue ; + } -get_device (part_to_dev (part)); - piter->part = part; piter->idx += inc;break ; }
drivers/block/Kconfig +1 -0
@@ -477,6 +477,7 @@ config BLK_DEV_RBD config BLK_DEV_RSXX tristate "IBM Flash Adapter 900GB Full Height PCIe Device Driver" depends on PCI + select CRC32 help Device driver for IBM's high speed PCIe SSD storage device: Flash Adapter 900GB Full Height.
drivers/cpufreq/powernow-k8.c +3 -6
@@ -887,9 +887,9 @@ static int get_transition_latency(struct powernow_k8_data *data)/* Take a frequency, and issue the fid/vid transition command */ static int transition_frequency_fidvid (struct powernow_k8_data *data, -unsigned int index) +unsigned int index, +struct cpufreq_policy *policy) { -struct cpufreq_policy *policy;u32 fid =0 ;u32 vid =0 ;int res;
@@ -921,9 +921,6 @@ static int transition_frequency_fidvid(struct powernow_k8_data *data, freqs.old =find_khz_freq_from_fid (data->currfid); freqs.new =find_khz_freq_from_fid (fid); - policy =cpufreq_cpu_get (smp_processor_id ()); -cpufreq_cpu_put (policy); -cpufreq_freq_transition_begin (policy, &freqs); res =transition_fid_vid (data, fid, vid);cpufreq_freq_transition_end (policy, &freqs, res);
@@ -978,7 +975,7 @@ static long powernowk8_target_fn(void *arg)powernow_k8_acpi_pst_values (data, newstate); - ret =transition_frequency_fidvid (data, newstate); + ret =transition_frequency_fidvid (data, newstate, pol);if (ret) {pr_err ("transition frequency failed\n" );
drivers/dma/xilinx/xilinx_dma.c +6 -2
@@ -2360,7 +2360,7 @@ static int xilinx_dma_chan_probe(struct xilinx_dma_device *xdev, has_dre = false;if (!has_dre) - xdev->common.copy_align =fls (width -1 ); + xdev->common.copy_align = (enum dmaengine_alignment )fls (width -1 ); if (of_device_is_compatible(node, "xlnx,axi-vdma-mm2s-channel") || of_device_is_compatible(node, "xlnx,axi-dma-mm2s-channel") ||
@@ -2637,7 +2637,11 @@ static int xilinx_dma_probe(struct platform_device *pdev) }/* Register the DMA engine with the core */ -dma_async_device_register (&xdev->common); + err =dma_async_device_register (&xdev->common); +if (err) { +dev_err (xdev->dev,"failed to register the dma device\n" ); + goto error; + } err =of_dma_controller_register (node, of_dma_xilinx_xlate, xdev);
drivers/gpu/drm/i915/i915_gem_execbuffer.c +1 -1
@@ -341,7 +341,7 @@ eb_vma_misplaced(const struct drm_i915_gem_exec_object2 *entry,return true;if (!(flags &EXEC_OBJECT_SUPPORTS_48B_ADDRESS ) && - (vma->node.start + vma->node.size -1 ) >>32 ) + (vma->node.start + vma->node.size +4095 ) >>32 )return true; if (flags & __EXEC_OBJECT_NEEDS_MAP &&
drivers/i2c/busses/i2c-sprd.c +7 -1
@@ -71,6 +71,8 @@/* timeout (ms) for pm runtime autosuspend */ #define SPRD_I2C_PM_TIMEOUT 1000 +/* timeout (ms) for transfer message */ +#define I2C_XFER_TIMEOUT 1000/* SPRD i2c data structure */ struct sprd_i2c {
@@ -244,6 +246,7 @@ static int sprd_i2c_handle_msg(struct i2c_adapter *i2c_adap, struct i2c_msg *msg, bool is_last_msg) {struct sprd_i2c *i2c_dev = i2c_adap->algo_data; +unsigned long time_left; i2c_dev->msg = msg; i2c_dev->buf = msg->buf;
@@ -273,7 +276,10 @@ static int sprd_i2c_handle_msg(struct i2c_adapter *i2c_adap,sprd_i2c_opt_start (i2c_dev); -wait_for_completion (&i2c_dev->complete); + time_left =wait_for_completion_timeout (&i2c_dev->complete, +msecs_to_jiffies (I2C_XFER_TIMEOUT )); +if (!time_left) +return -ETIMEDOUT ;return i2c_dev->err; }
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c +21 -5
@@ -395,13 +395,29 @@ static irqreturn_t st_lsm6dsx_handler_irq(int irq, void *private)static irqreturn_t st_lsm6dsx_handler_thread (int irq,void *private) {struct st_lsm6dsx_hw *hw = private; -int count; +int fifo_len =0 , len; -mutex_lock (&hw->fifo_lock); - count =st_lsm6dsx_read_fifo (hw); -mutex_unlock (&hw->fifo_lock); +/* +* If we are using edge IRQs, new samples can arrive while +* processing current interrupt since there are no hw +* guarantees the irq line stays "low" long enough to properly +* detect the new interrupt. In this case the new sample will +* be missed. +* Polling FIFO status register allow us to read new +* samples even if the interrupt arrives while processing +* previous data and the timeslot where the line is "low" is +* too short to be properly detected. +*/ +do { +mutex_lock (&hw->fifo_lock); + len =st_lsm6dsx_read_fifo (hw); +mutex_unlock (&hw->fifo_lock); + +if (len >0 ) + fifo_len += len; + }while (len >0 ); -return !count ?IRQ_NONE :IRQ_HANDLED ; +return fifo_len ?IRQ_HANDLED :IRQ_NONE ; }static int st_lsm6dsx_buffer_preenable (struct iio_dev *iio_dev)
drivers/iommu/intel_irq_remapping.c +2 -0
@@ -1367,6 +1367,8 @@ static int intel_irq_remapping_alloc(struct irq_domain *domain, irq_data =irq_domain_get_irq_data (domain, virq + i); irq_cfg =irqd_cfg (irq_data);if (!irq_data || !irq_cfg) { +if (!i) +kfree (data); ret = -EINVAL ; goto out_free_data; }
drivers/net/ethernet/mellanox/mlx5/core/en_fs.c +3 -0
@@ -961,6 +961,7 @@ static int mlx5e_create_inner_ttc_table_groups(struct mlx5e_ttc_table *ttc) in =kvzalloc (inlen,GFP_KERNEL );if (!in) {kfree (ft->g); + ft->g =NULL ;return -ENOMEM ; }
@@ -1181,6 +1182,7 @@ static int mlx5e_create_l2_table_groups(struct mlx5e_l2_table *l2_table) in =kvzalloc (inlen,GFP_KERNEL );if (!in) {kfree (ft->g); + ft->g =NULL ;return -ENOMEM ; }
@@ -1226,6 +1228,7 @@ static int mlx5e_create_l2_table_groups(struct mlx5e_l2_table *l2_table) ft->g[ft->num_groups] =NULL ;mlx5e_destroy_groups (ft);kvfree (in); +kfree (ft->g);return err; }
drivers/net/usb/cdc_ncm.c +6 -2
@@ -1128,7 +1128,10 @@ cdc_ncm_fill_tx_frame(struct usbnet *dev, struct sk_buff *skb, __le32 sign)* accordingly. Otherwise, we should check here. */ if (ctx->drvflags &CDC_NCM_FLAG_NDP_TO_END ) - delayed_ndp_size =ALIGN (ctx->max_ndp_size, ctx->tx_ndp_modulus); + delayed_ndp_size = ctx->max_ndp_size + +max_t (u32, + ctx->tx_ndp_modulus, + ctx->tx_modulus + ctx->tx_remainder) -1 ;else delayed_ndp_size =0 ;
@@ -1309,7 +1312,8 @@ cdc_ncm_fill_tx_frame(struct usbnet *dev, struct sk_buff *skb, __le32 sign)if (!(dev->driver_info->flags &FLAG_SEND_ZLP ) && skb_out->len > ctx->min_tx_pkt) { padding_count = ctx->tx_curr_size - skb_out->len; -skb_put_zero (skb_out, padding_count); +if (!WARN_ON (padding_count > ctx->tx_curr_size)) +skb_put_zero (skb_out, padding_count); }else if (skb_out->len < ctx->tx_curr_size && (skb_out->len % dev->maxpacket) ==0 ) {skb_put_u8 (skb_out,0 );/* force short packet */
drivers/net/wan/Kconfig +1 -0
@@ -295,6 +295,7 @@ config SLIC_DS26522 tristate "Slic Maxim ds26522 card support" depends on SPI depends on FSL_SOC || ARCH_MXC || ARCH_LAYERSCAPE || COMPILE_TEST + select BITREVERSE help This module initializes and configures the slic maxim card in T1 or E1 mode.
drivers/net/wireless/ath/wil6210/Kconfig +1 -0
@@ -1,6 +1,7 @@ config WIL6210 tristate "Wilocity 60g WiFi card wil6210 support" select WANT_DEV_COREDUMP + select CRC32 depends on CFG80211 depends on PCI default n
drivers/spi/spi-pxa2xx.c +1 -2
@@ -1660,7 +1660,7 @@ static int pxa2xx_spi_probe(struct platform_device *pdev)return -ENODEV ; } - master =spi_alloc_master (dev,sizeof (struct driver_data )); + master =devm_spi_alloc_master (dev,sizeof (*drv_data));if (!master) {dev_err (&pdev->dev,"cannot alloc spi_master\n" );pxa_ssp_free (ssp);
@@ -1841,7 +1841,6 @@ static int pxa2xx_spi_probe(struct platform_device *pdev)free_irq (ssp->irq, drv_data); out_error_master_alloc: -spi_master_put (master);pxa_ssp_free (ssp);return status; }
drivers/spi/spi-stm32.c +2 -2
@@ -299,9 +299,9 @@ static u32 stm32_spi_prepare_fthlv(struct stm32_spi *spi)/* align packet size with data registers access */ if (spi->cur_bpw >8 ) - fthlv -= (fthlv %2 );/* multiple of 2 */ + fthlv += (fthlv %2 ) ?1 :0 ;else - fthlv -= (fthlv %4 );/* multiple of 4 */ + fthlv += (fthlv %4 ) ? (4 - (fthlv %4 )) :0 ;return fthlv; }
fs/ubifs/io.c +11 -2
@@ -331,7 +331,7 @@ void ubifs_pad(const struct ubifs_info *c, void *buf, int pad) {uint32_t crc; -ubifs_assert (pad >=0 && !(pad &7 )); +ubifs_assert (pad >=0 );if (pad >=UBIFS_PAD_NODE_SZ ) {struct ubifs_ch *ch = buf;
@@ -727,6 +727,10 @@ int ubifs_wbuf_write_nolock(struct ubifs_wbuf *wbuf, void *buf, int len)* write-buffer. */ memcpy (wbuf->buf + wbuf->used, buf, len); +if (aligned_len > len) { +ubifs_assert (aligned_len - len <8 ); +ubifs_pad (c, wbuf->buf + wbuf->used + len, aligned_len - len); + }if (aligned_len == wbuf->avail) { dbg_io("flush jhead %s wbuf to LEB %d:%d",
@@ -819,13 +823,18 @@ int ubifs_wbuf_write_nolock(struct ubifs_wbuf *wbuf, void *buf, int len) }spin_lock (&wbuf->lock); -if (aligned_len) +if (aligned_len) {/* * And now we have what's left and what does not take whole * max. write unit, so write it to the write-buffer and we are * done. */ memcpy (wbuf->buf, buf + written, len); +if (aligned_len > len) { +ubifs_assert (aligned_len - len <8 ); +ubifs_pad (c, wbuf->buf + len, aligned_len - len); + } + }if (c->leb_size - wbuf->offs >= c->max_write_size) wbuf->size = c->max_write_size;
include/asm-generic/vmlinux.lds.h +4 -1
@@ -459,7 +459,10 @@*/ #define TEXT_TEXT \ ALIGN_FUNCTION(); \ - *(.text.hot TEXT_MAIN .text.fixup .text.unlikely) \ + *(.text.hot .text.hot.*) \ + *(TEXT_MAIN .text.fixup) \ + *(.text.unlikely .text.unlikely.*) \ + *(.text.unknown .text.unknown.*) \ *(.text..refcount) \ *(.ref.text) \ MEM_KEEP(init.text) \
net/8021q/vlan.c +2 -1
@@ -272,7 +272,8 @@ static int register_vlan_device(struct net_device *real_dev, u16 vlan_id)return 0 ; out_free_newdev: -if (new_dev->reg_state ==NETREG_UNINITIALIZED ) +if (new_dev->reg_state ==NETREG_UNINITIALIZED || + new_dev->reg_state ==NETREG_UNREGISTERED )free_netdev (new_dev);return err; }
net/core/skbuff.c +6 -0
@@ -1850,6 +1850,12 @@ int pskb_trim_rcsum_slow(struct sk_buff *skb, unsigned int len) skb->csum =csum_block_sub (skb->csum,skb_checksum (skb, len, delta,0 ), len); + }else if (skb->ip_summed ==CHECKSUM_PARTIAL ) { +int hdlen = (len >skb_headlen (skb)) ?skb_headlen (skb) : len; +int offset =skb_checksum_start_offset (skb) + skb->csum_offset; + +if (offset +sizeof (__sum16) > hdlen) +return -EINVAL ; }return __pskb_trim (skb, len); }
net/ipv4/ip_output.c +1 -1
@@ -312,7 +312,7 @@ static int ip_finish_output(struct net *net, struct sock *sk, struct sk_buff *skif (skb_is_gso (skb))return ip_finish_output_gso (net, sk, skb, mtu); -if (skb->len > mtu || (IPCB (skb)->flags &IPSKB_FRAG_PMTU )) +if (skb->len > mtu ||IPCB (skb)->frag_max_size)return ip_fragment (net, sk, skb, mtu, ip_finish_output2);return ip_finish_output2 (net, sk, skb);
net/ipv4/ip_tunnel.c +5 -5
@@ -752,7 +752,11 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev, goto tx_error; } -if (tnl_update_pmtu (dev, skb, rt, tnl_params->frag_off, inner_iph)) { + df = tnl_params->frag_off; +if (skb->protocol ==htons (ETH_P_IP ) && !tunnel->ignore_df) + df |= (inner_iph->frag_off &htons (IP_DF )); + +if (tnl_update_pmtu (dev, skb, rt, df, inner_iph)) {ip_rt_put (rt); goto tx_error; }
@@ -780,10 +784,6 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev, ttl =ip4_dst_hoplimit (&rt->dst); } - df = tnl_params->frag_off; -if (skb->protocol ==htons (ETH_P_IP ) && !tunnel->ignore_df) - df |= (inner_iph->frag_off&htons (IP_DF )); - max_headroom =LL_RESERVED_SPACE (rt->dst.dev) +sizeof (struct iphdr ) + rt->dst.header_len +ip_encap_hlen (&tunnel->encap);if (max_headroom > dev->needed_headroom)