Linux 4.4.274
Sasha Levin
maintainer-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
I'm announcing the release of the 4.4.274 kernel.
All users of the 4.4 kernel series must upgrade.
The updated 4.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.4.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,
Sasha
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCgAdFiEE4n5dijQDou9mhzu83qZv95d3LNwFAmDcdJAACgkQ3qZv95d3 LNy2nw/8DjXdbC/e2QMD0vKWBKmEeJv4IdTEqZ0UFy6TtXYEu5xP6nPjQwFj1QBe QEjA2/E/OfbVvw03VmkJCYhIJHNjod7+qc2fjwiYqwjuanzaEL1r1bwjvuAWEWir 4Dv7Ld24qGvPIku/9/O6scdEYhCxJD0nmP1PoYi65+qysdKz0Uz9/H8NGMg/4EOL N0SO402K38PXMpSqNVQO1j/geBhGMEdKYPCCHbYtuTI2HTp+cz24dHuJ3qCnNZvu 6TLienmeqrfSHWZcy5Ylfe4pvac79ZOu2k8R/bOaldoDJEKsGIvhcXkW148u9J2R 344QhW7kf+qyjWbuYUTRT4MCJMU7gmSxOUpKj9uk1k0flC6kQlOmJgxK2tWcI76R NhokvUXNDMBhD15FkomU2djDTeZlE213UNPerf3rdIvobCzqWKyQRhmf7UuIKA73 gukTSnVr5qW9PpAWsIoIeNVK/MTgqLX/KMTOOVjudPwo9ub+KeGgffWBK5JUBagX a0THRt0C+bRoSQw5AWc/Wjbk5yd2ZIfmrLWRTjfAxWkEzOmd5k+1xC4BhrDMw/+f ltsplL3LVFQ4vnUOiRsJfiLxVSPxdHP0xqhdSi/v2BKVyvwooqygv+2E+yCx6ChM EkmJ7I3Nx+90WUxN4aKS2B4G8yX+r2p3XXzPomXkkqhkoOm5odc= =dnqU
-----END PGP SIGNATURE-----
Sasha Levin
maintainerMakefile +2 -3
@@ -1,6 +1,6 @@ VERSION = 4 PATCHLEVEL = 4 -SUBLEVEL = 273 +SUBLEVEL = 274 EXTRAVERSION = NAME = Blurry Fish Butt
@@ -716,12 +716,11 @@ KBUILD_CFLAGS += $(call cc-disable-warning, tautological-compare) # See modpost pattern 2 KBUILD_CFLAGS += $(call cc-option, -mno-global-merge,) KBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior) -else +endif # These warnings generated too much noise in a regular build. # Use make W=1 to enable them (see scripts/Makefile.extrawarn) KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable) -endif KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable) ifdef CONFIG_FRAME_POINTER
arch/arm/kernel/setup.c +9 -7
@@ -479,9 +479,11 @@ void notrace cpu_init(void)* In Thumb-2, msr with an immediate value is not allowed. */ #ifdef CONFIG_THUMB2_KERNEL -#define PLC "r" +#define PLC_l "l" +#define PLC_r "r"#else -#define PLC "I" +#define PLC_l "I" +#define PLC_r "I"#endif /*
@@ -503,15 +505,15 @@ void notrace cpu_init(void) "msr cpsr_c, %9" : : "r" (stk), - PLC (PSR_F_BIT | PSR_I_BIT | IRQ_MODE), + PLC_r (PSR_F_BIT | PSR_I_BIT | IRQ_MODE), "I" (offsetof(struct stack, irq[0])), - PLC (PSR_F_BIT | PSR_I_BIT | ABT_MODE), + PLC_r (PSR_F_BIT | PSR_I_BIT | ABT_MODE), "I" (offsetof(struct stack, abt[0])), - PLC (PSR_F_BIT | PSR_I_BIT | UND_MODE), + PLC_r (PSR_F_BIT | PSR_I_BIT | UND_MODE), "I" (offsetof(struct stack, und[0])), - PLC (PSR_F_BIT | PSR_I_BIT | FIQ_MODE), + PLC_r (PSR_F_BIT | PSR_I_BIT | FIQ_MODE), "I" (offsetof(struct stack, fiq[0])), - PLC (PSR_F_BIT | PSR_I_BIT | SVC_MODE) + PLC_l (PSR_F_BIT | PSR_I_BIT | SVC_MODE) : "r14");#endif }
arch/arm/mach-omap2/board-n8x0.c +1 -1
@@ -328,6 +328,7 @@ static int n8x0_mmc_get_cover_state(struct device *dev, int slot)static void n8x0_mmc_callback (void *data,u8 card_mask) { +#ifdef CONFIG_MMC_OMAP int bit, *openp, index;if (board_is_n800 ()) {
@@ -345,7 +346,6 @@ static void n8x0_mmc_callback(void *data, u8 card_mask) else *openp =0 ; -#ifdef CONFIG_MMC_OMAP omap_mmc_notify_cover_event (mmc_device, index, *openp);#else pr_warn ("MMC: notify cover event not available\n" );
arch/x86/kernel/fpu/signal.c +13 -5
@@ -262,15 +262,23 @@ static int __fpu__restore_sig(void __user *buf, void __user *buf_fx, int size)return 0 ; } -if (!access_ok (VERIFY_READ , buf, size)) +if (!access_ok (VERIFY_READ , buf, size)) { +fpu__clear (fpu);return -EACCES ; + }fpu__activate_curr (fpu); -if (!static_cpu_has (X86_FEATURE_FPU )) -return fpregs_soft_set (current,NULL , -0 ,sizeof (struct user_i387_ia32_struct ), -NULL , buf) !=0 ; +if (!static_cpu_has (X86_FEATURE_FPU )) { +int ret =fpregs_soft_set (current,NULL ,0 , +sizeof (struct user_i387_ia32_struct ), +NULL , buf); + +if (ret) +fpu__clear (fpu); + +return ret !=0 ; + }if (use_xsave ()) {struct _fpx_sw_bytes fx_sw_user;
drivers/dma/pl330.c +4 -2
@@ -2531,13 +2531,15 @@ static struct dma_async_tx_descriptor *pl330_prep_dma_cyclic(for (i =0 ; i < len / period_len; i++) { desc =pl330_get_desc (pch);if (!desc) { +unsigned long iflags; +dev_err (pch->dmac->ddma.dev,"%s:%d Unable to fetch desc\n" , __func__, __LINE__);if (!first)return NULL ; -spin_lock_irqsave (&pl330->pool_lock, flags); +spin_lock_irqsave (&pl330->pool_lock, iflags);while (!list_empty (&first->node)) { desc = list_entry(first->node.next,
@@ -2547,7 +2549,7 @@ static struct dma_async_tx_descriptor *pl330_prep_dma_cyclic(list_move_tail (&first->node, &pl330->desc_pool); -spin_unlock_irqrestore (&pl330->pool_lock, flags); +spin_unlock_irqrestore (&pl330->pool_lock, iflags);return NULL ; }
drivers/dma/ste_dma40.c +3 -0
@@ -3715,6 +3715,9 @@ failure:kfree (base->lcla_pool.base_unaligned); +if (base->lcpa_base) +iounmap (base->lcpa_base); +if (base->phy_lcpa)release_mem_region (base->phy_lcpa, base->lcpa_size);
drivers/gpu/drm/radeon/radeon_uvd.c +2 -2
@@ -242,7 +242,7 @@ int radeon_uvd_resume(struct radeon_device *rdev)if (rdev->uvd.vcpu_bo ==NULL )return -EINVAL ; -memcpy (rdev->uvd.cpu_addr, rdev->uvd_fw->data, rdev->uvd_fw->size); +memcpy_toio ((void __iomem *)rdev->uvd.cpu_addr, rdev->uvd_fw->data, rdev->uvd_fw->size); size =radeon_bo_size (rdev->uvd.vcpu_bo); size -= rdev->uvd_fw->size;
@@ -250,7 +250,7 @@ int radeon_uvd_resume(struct radeon_device *rdev) ptr = rdev->uvd.cpu_addr; ptr += rdev->uvd_fw->size; -memset (ptr,0 , size); +memset_io ((void __iomem *)ptr,0 , size);return 0 ; }
drivers/hid/hid-core.c +3 -0
@@ -1765,6 +1765,9 @@ int hid_connect(struct hid_device *hdev, unsigned int connect_mask)case BUS_I2C : bus ="I2C" ;break ; +case BUS_VIRTUAL : + bus ="VIRTUAL" ; +break ;default : bus ="<UNKNOWN>" ; }
drivers/hid/hid-gt683r.c +1 -0
@@ -64,6 +64,7 @@ static const struct hid_device_id gt683r_led_id[] = { { HID_USB_DEVICE(USB_VENDOR_ID_MSI, USB_DEVICE_ID_MSI_GT683R_LED_PANEL) }, { } }; +MODULE_DEVICE_TABLE (hid, gt683r_led_id);static void gt683r_brightness_set (struct led_classdev *led_cdev,enum led_brightness brightness)
drivers/hid/hid-sensor-hub.c +9 -4
@@ -222,16 +222,21 @@ int sensor_hub_set_feature(struct hid_sensor_hub_device *hsdev, u32 report_id, buffer_size = buffer_size /sizeof (__s32);if (buffer_size) {for (i =0 ; i < buffer_size; ++i) { -hid_set_field (report->field[field_index], i, - (__force __s32 )cpu_to_le32 (*buf32)); + ret =hid_set_field (report->field[field_index], i, + (__force __s32 )cpu_to_le32 (*buf32)); +if (ret) + goto done_proc; + ++buf32; } }if (remaining_bytes) { value =0 ;memcpy (&value, (u8 *)buf32, remaining_bytes); -hid_set_field (report->field[field_index], i, - (__force __s32 )cpu_to_le32 (value)); + ret =hid_set_field (report->field[field_index], i, + (__force __s32 )cpu_to_le32 (value)); +if (ret) + goto done_proc; }hid_hw_request (hsdev->hdev, report,HID_REQ_SET_REPORT );hid_hw_wait (hsdev->hdev);
drivers/hid/usbhid/hid-core.c +1 -1
@@ -372,7 +372,7 @@ static int hid_submit_ctrl(struct hid_device *hid) raw_report = usbhid->ctrl[usbhid->ctrltail].raw_report; dir = usbhid->ctrl[usbhid->ctrltail].dir; - len = ((report->size -1 ) >>3 ) +1 + (report->id >0 ); + len =hid_report_len (report);if (dir ==USB_DIR_OUT ) { usbhid->urbctrl->pipe =usb_sndctrlpipe (hid_to_usb_dev (hid),0 ); usbhid->urbctrl->transfer_buffer_length = len;
drivers/i2c/busses/i2c-robotfuzz-osif.c +2 -2
@@ -89,7 +89,7 @@ static int osif_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, } } - ret =osif_usb_read (adapter,OSIFI2C_STOP ,0 ,0 ,NULL ,0 ); + ret =osif_usb_write (adapter,OSIFI2C_STOP ,0 ,0 ,NULL ,0 );if (ret) {dev_err (&adapter->dev,"failure sending STOP\n" );return -EREMOTEIO ;
@@ -159,7 +159,7 @@ static int osif_probe(struct usb_interface *interface,* Set bus frequency. The frequency is: * 120,000,000 / ( 16 + 2 * div * 4^prescale). * Using dev = 52, prescale = 0 give 100KHz */ - ret =osif_usb_read (&priv->adapter,OSIFI2C_SET_BIT_RATE ,52 ,0 , + ret =osif_usb_write (&priv->adapter,OSIFI2C_SET_BIT_RATE ,52 ,0 ,NULL ,0 );if (ret) {dev_err (&interface->dev,"failure sending bit rate" );
drivers/net/caif/caif_serial.c +1 -0
@@ -362,6 +362,7 @@ static int ldisc_open(struct tty_struct *tty)rtnl_lock (); result =register_netdevice (dev);if (result) { +tty_kref_put (tty);rtnl_unlock ();free_netdev (dev);return -ENODEV ;
drivers/net/ethernet/ec_bhf.c +3 -1
@@ -589,10 +589,12 @@ static void ec_bhf_remove(struct pci_dev *dev)struct ec_bhf_priv *priv =netdev_priv (net_dev);unregister_netdev (net_dev); -free_netdev (net_dev);pci_iounmap (dev, priv->dma_io);pci_iounmap (dev, priv->io); + +free_netdev (net_dev); +pci_release_regions (dev);pci_clear_master (dev);pci_disable_device (dev);
drivers/net/ethernet/emulex/benet/be_main.c +1 -0
@@ -5878,6 +5878,7 @@ drv_cleanup: unmap_bars:be_unmap_pci_bars (adapter); free_netdev: +pci_disable_pcie_error_reporting (pdev);free_netdev (netdev); rel_reg:pci_release_regions (pdev);
drivers/net/ethernet/freescale/fec_ptp.c +4 -0
@@ -586,6 +586,10 @@ void fec_ptp_init(struct platform_device *pdev) fep->ptp_caps.enable = fec_ptp_enable; fep->cycle_speed =clk_get_rate (fep->clk_ptp); +if (!fep->cycle_speed) { + fep->cycle_speed =NSEC_PER_SEC ; +dev_err (&fep->pdev->dev,"clk_ptp clock rate is zero\n" ); + } fep->ptp_inc =NSEC_PER_SEC / fep->cycle_speed;spin_lock_init (&fep->tmreg_lock);
drivers/net/ethernet/myricom/myri10ge/myri10ge.c +1 -0
@@ -4051,6 +4051,7 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent)dev_err (&pdev->dev,"invalid sram_size %dB or board span %ldB\n" , mgp->sram_size, mgp->board_span); + status = -EINVAL ; goto abort_with_ioremap; } memcpy_fromio(mgp->eeprom_strings,
drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c +2 -0
@@ -1616,6 +1616,8 @@ err_out_free_netdev:free_netdev (netdev); err_out_free_res: +if (NX_IS_REVISION_P3 (pdev->revision)) +pci_disable_pcie_error_reporting (pdev);pci_release_regions (pdev); err_out_disable_pdev:
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +1 -0
@@ -2706,6 +2706,7 @@ err_out_free_hw_res:kfree (ahw); err_out_free_res: +pci_disable_pcie_error_reporting (pdev);pci_release_regions (pdev); err_out_disable_pdev:
drivers/net/ethernet/realtek/r8169.c +1 -1
@@ -2314,7 +2314,7 @@ static void rtl8169_get_strings(struct net_device *dev, u32 stringset, u8 *data) {switch (stringset) {case ETH_SS_STATS : -memcpy (data, *rtl8169_gstrings,sizeof (rtl8169_gstrings)); +memcpy (data, rtl8169_gstrings,sizeof (rtl8169_gstrings));break ; } }
drivers/net/ethernet/renesas/sh_eth.c +1 -1
@@ -2210,7 +2210,7 @@ static void sh_eth_get_strings(struct net_device *ndev, u32 stringset, u8 *data) {switch (stringset) {case ETH_SS_STATS : -memcpy (data, *sh_eth_gstrings_stats, +memcpy (data, sh_eth_gstrings_stats,sizeof (sh_eth_gstrings_stats));break ; }
drivers/net/ethernet/stmicro/stmmac/dwmac1000.h +4 -4
@@ -83,10 +83,10 @@ enum power_event {#define LPI_CTRL_STATUS_TLPIEN 0x00000001/* Transmit LPI Entry */ /* GMAC HW ADDR regs */ -#define GMAC_ADDR_HIGH (reg) (((reg > 15) ? 0x00000800 : 0x00000040) + \ - (reg * 8)) -#define GMAC_ADDR_LOW (reg) (((reg > 15) ? 0x00000804 : 0x00000044) + \ - (reg * 8)) +#define GMAC_ADDR_HIGH (reg) ((reg > 15) ? 0x00000800 + (reg - 16) * 8 : \ + 0x00000040 + (reg * 8)) +#define GMAC_ADDR_LOW (reg) ((reg > 15) ? 0x00000804 + (reg - 16) * 8 : \ + 0x00000044 + (reg * 8))#define GMAC_MAX_PERFECT_ADDRESSES 1/* PCS registers (AN/TBI/SGMII/RGMII) offset */
drivers/net/ethernet/xilinx/ll_temac_main.c +5 -0
@@ -735,6 +735,11 @@ temac_start_xmit(struct sk_buff *skb, struct net_device *ndev)/* Kick off the transfer */ lp->dma_out (lp,TX_TAILDESC_PTR , tail_p);/* DMA start */ +if (temac_check_tx_bd_space (lp,MAX_SKB_FRAGS +1 )) { +netdev_info (ndev,"%s -> netif_stop_queue\n" , __func__); +netif_stop_queue (ndev); + } +return NETDEV_TX_OK ; }
drivers/net/hamradio/mkiss.c +1 -0
@@ -810,6 +810,7 @@ static void mkiss_close(struct tty_struct *tty) ax->tty =NULL ;unregister_netdev (ax->dev); +free_netdev (ax->dev); }/* Perform I/O control on an active ax25 channel. */
drivers/net/usb/cdc_eem.c +1 -1
@@ -138,10 +138,10 @@ static struct sk_buff *eem_tx_fixup(struct usbnet *dev, struct sk_buff *skb, } skb2 =skb_copy_expand (skb,EEM_HEAD ,ETH_FCS_LEN + padlen, flags); +dev_kfree_skb_any (skb);if (!skb2)return NULL ; -dev_kfree_skb_any (skb); skb = skb2; done:
drivers/net/usb/cdc_ncm.c +1 -1
@@ -1580,7 +1580,7 @@ static void cdc_ncm_status(struct usbnet *dev, struct urb *urb)static const struct driver_info cdc_ncm_info = { .description ="CDC NCM" , .flags =FLAG_POINTTOPOINT |FLAG_NO_SETINT |FLAG_MULTI_PACKET - |FLAG_LINK_INTR , + |FLAG_LINK_INTR |FLAG_ETHER , .bind = cdc_ncm_bind, .unbind = cdc_ncm_unbind, .manage_power = usbnet_manage_power,
drivers/net/usb/r8152.c +1 -1
@@ -3820,7 +3820,7 @@ static void rtl8152_get_strings(struct net_device *dev, u32 stringset, u8 *data) {switch (stringset) {case ETH_SS_STATS : -memcpy (data, *rtl8152_gstrings,sizeof (rtl8152_gstrings)); +memcpy (data, rtl8152_gstrings,sizeof (rtl8152_gstrings));break ; } }
drivers/net/usb/smsc75xx.c +6 -4
@@ -1485,7 +1485,7 @@ static int smsc75xx_bind(struct usbnet *dev, struct usb_interface *intf) ret =smsc75xx_wait_ready (dev,0 );if (ret <0 ) {netdev_warn (dev->net,"device not ready in smsc75xx_bind\n" ); - goto err; + goto free_pdata; }smsc75xx_init_mac_address (dev);
@@ -1494,7 +1494,7 @@ static int smsc75xx_bind(struct usbnet *dev, struct usb_interface *intf) ret =smsc75xx_reset (dev);if (ret <0 ) {netdev_warn (dev->net,"smsc75xx_reset error %d\n" , ret); - goto err; + goto cancel_work; } dev->net->netdev_ops = &smsc75xx_netdev_ops;
@@ -1504,8 +1504,11 @@ static int smsc75xx_bind(struct usbnet *dev, struct usb_interface *intf) dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len;return 0 ; -err: +cancel_work: +cancel_work_sync (&pdata->set_multicast); +free_pdata:kfree (pdata); + dev->data[0 ] =0 ;return ret; }
@@ -1516,7 +1519,6 @@ static void smsc75xx_unbind(struct usbnet *dev, struct usb_interface *intf)cancel_work_sync (&pdata->set_multicast);netif_dbg (dev, ifdown, dev->net,"free pdata\n" );kfree (pdata); - pdata =NULL ; dev->data[0 ] =0 ; } }
drivers/pci/pci.c +13 -3
@@ -1328,11 +1328,21 @@ static int pci_enable_device_flags(struct pci_dev *dev, unsigned long flags)int err;int i, bars =0 ; -if (atomic_inc_return (&dev->enable_cnt) >1 ) { -pci_update_current_state (dev, dev->current_state); -return 0 ;/* already enabled */ +/* +* Power state could be unknown at this point, either due to a fresh +* boot or a device removal call. So get the current power state +* so that things like MSI message writing will behave as expected +* (e.g. if the device really is in D0 at enable time). +*/ +if (dev->pm_cap) { +u16 pmcsr; +pci_read_config_word (dev, dev->pm_cap +PCI_PM_CTRL , &pmcsr); + dev->current_state = (pmcsr &PCI_PM_CTRL_STATE_MASK ); } +if (atomic_inc_return (&dev->enable_cnt) >1 ) +return 0 ;/* already enabled */ + bridge =pci_upstream_bridge (dev);if (bridge)pci_enable_bridge (bridge);
drivers/pci/quirks.c +22 -0
@@ -3144,6 +3144,18 @@ static void quirk_no_bus_reset(struct pci_dev *dev) dev->dev_flags |=PCI_DEV_FLAGS_NO_BUS_RESET ; } +/* +* Some NVIDIA GPU devices do not work with bus reset, SBR needs to be +* prevented for those affected devices. +*/ +static void quirk_nvidia_no_bus_reset (struct pci_dev *dev) +{ +if ((dev->device &0xffc0 ) ==0x2340 ) +quirk_no_bus_reset (dev); +} +DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_NVIDIA ,PCI_ANY_ID , + quirk_nvidia_no_bus_reset); +/* * Some Atheros AR9xxx and QCA988x chips do not behave after a bus reset. * The device will throw a Link Down error on AER-capable systems and
@@ -3157,6 +3169,16 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATHEROS, 0x003c, quirk_no_bus_reset);DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_ATHEROS ,0x0033 , quirk_no_bus_reset);DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_ATHEROS ,0x0034 , quirk_no_bus_reset); +/* +* Some TI KeyStone C667X devices do not support bus/hot reset. The PCIESS +* automatically disables LTSSM when Secondary Bus Reset is received and +* the device stops working. Prevent bus reset for these devices. With +* this change, the device can be assigned to VMs with VFIO, but it will +* leak state between VMs. Reference +* https://e2e.ti.com/support/processors/f/791/t/954382 +*/ +DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_TI ,0xb005 , quirk_no_bus_reset); +static void quirk_no_pm_reset (struct pci_dev *dev) {/*
drivers/scsi/hosts.c +6 -2
@@ -259,12 +259,11 @@ int scsi_add_host_with_dma(struct Scsi_Host *shost, struct device *dev,device_enable_async_suspend (&shost->shost_dev); +get_device (&shost->shost_gendev); error =device_add (&shost->shost_dev);if (error) goto out_del_gendev; -get_device (&shost->shost_gendev); -if (shost->transportt->host_size) { shost->shost_data =kzalloc (shost->transportt->host_size,GFP_KERNEL );
@@ -300,6 +299,11 @@ int scsi_add_host_with_dma(struct Scsi_Host *shost, struct device *dev, out_del_dev:device_del (&shost->shost_dev); out_del_gendev: +/* +* Host state is SHOST_RUNNING so we have to explicitly release +* ->shost_dev. +*/ +put_device (&shost->shost_dev);device_del (&shost->shost_gendev); out_destroy_freelist:scsi_destroy_command_freelist (shost);
drivers/target/target_core_transport.c +1 -3
@@ -2757,9 +2757,7 @@ __transport_wait_for_tasks(struct se_cmd *cmd, bool fabric_stop, __releases(&cmd->t_state_lock) __acquires(&cmd->t_state_lock) { - -assert_spin_locked (&cmd->t_state_lock); -WARN_ON_ONCE (!irqs_disabled ()); +lockdep_assert_held (&cmd->t_state_lock);if (fabric_stop) cmd->transport_state |=CMD_T_FABRIC_STOP ;
fs/gfs2/glock.c +1 -1
@@ -1342,6 +1342,7 @@ __acquires(&lru_lock)while (!list_empty (list)) { gl = list_entry(list->next, struct gfs2_glock, gl_lru);list_del_init (&gl->gl_lru); +clear_bit (GLF_LRU , &gl->gl_flags);if (!spin_trylock (&gl->gl_lockref.lock)) { add_back_to_lru:list_add (&gl->gl_lru, &lru_list);
@@ -1388,7 +1389,6 @@ static long gfs2_scan_glock_lru(int nr)if (!test_bit (GLF_LOCK , &gl->gl_flags)) {list_move (&gl->gl_lru, &dispose);atomic_dec (&lru_count); -clear_bit (GLF_LRU , &gl->gl_flags); freed++;continue ; }
fs/nilfs2/sysfs.c +1 -0
@@ -1062,6 +1062,7 @@ void nilfs_sysfs_delete_device_group(struct the_nilfs *nilfs)nilfs_sysfs_delete_superblock_group (nilfs);nilfs_sysfs_delete_segctor_group (nilfs);kobject_del (&nilfs->ns_dev_kobj); +kobject_put (&nilfs->ns_dev_kobj);kfree (nilfs->ns_dev_subgroups); }
include/linux/hid.h +1 -2
@@ -1119,8 +1119,7 @@ static inline void hid_hw_wait(struct hid_device *hdev)*/ static inline u32 hid_report_len (struct hid_report *report) { -/* equivalent to DIV_ROUND_UP(report->size, 8) + !!(report->id > 0) */ -return ((report->size -1 ) >>3 ) +1 + (report->id >0 ); +return DIV_ROUND_UP (report->size,8 ) + (report->id >0 ); } int hid_report_raw_event(struct hid_device *hid, int type, u8 *data, u32 size,
include/net/sock.h +7 -3
@@ -1728,7 +1728,8 @@ static inline u32 net_tx_rndhash(void)static inline void sk_set_txhash (struct sock *sk) { - sk->sk_txhash =net_tx_rndhash (); +/* This pairs with READ_ONCE() in skb_set_hash_from_sk() */ +WRITE_ONCE (sk->sk_txhash,net_tx_rndhash ()); }static inline void sk_rethink_txhash (struct sock *sk)
@@ -1980,9 +1981,12 @@ static inline void sock_poll_wait(struct file *filp,static inline void skb_set_hash_from_sk (struct sk_buff *skb,struct sock *sk) { -if (sk->sk_txhash) { +/* This pairs with WRITE_ONCE() in sk_set_txhash() */ +u32 txhash =READ_ONCE (sk->sk_txhash); + +if (txhash) { skb->l4_hash =1 ; - skb->hash = sk->sk_txhash; + skb->hash = txhash; } }
kernel/trace/trace.c +0 -12
@@ -1369,9 +1369,6 @@ struct saved_cmdlines_buffer { };static struct saved_cmdlines_buffer *savedcmd; -/* temporary disable recording */ -static atomic_t trace_record_cmdline_disabled__read_mostly ; -static inline char *get_saved_cmdlines (int idx) {return &savedcmd->saved_cmdlines[idx *TASK_COMM_LEN ];
@@ -1635,9 +1632,6 @@ void trace_find_cmdline(int pid, char comm[])void tracing_record_cmdline (struct task_struct *tsk) { -if (atomic_read (&trace_record_cmdline_disabled) || !tracing_is_on ()) -return ; -if (!__this_cpu_read (trace_cmdline_save))return ;
@@ -2500,9 +2494,6 @@ static void *s_start(struct seq_file *m, loff_t *pos)return ERR_PTR (-EBUSY );#endif -if (!iter->snapshot) -atomic_inc (&trace_record_cmdline_disabled); -if (*pos != iter->pos) { iter->ent =NULL ; iter->cpu =0 ;
@@ -2545,9 +2536,6 @@ static void s_stop(struct seq_file *m, void *p)return ;#endif -if (!iter->snapshot) -atomic_dec (&trace_record_cmdline_disabled); -trace_access_unlock (iter->cpu_file);trace_event_read_unlock (); }
kernel/trace/trace_clock.c +3 -3
@@ -113,9 +113,9 @@ u64 notrace trace_clock_global(void) prev_time =READ_ONCE (trace_clock_struct.prev_time); now =sched_clock_cpu (this_cpu); -/* Make sure that now is always greater than prev_time */ +/* Make sure that now is always greater than or equal to prev_time */ if ((s64)(now - prev_time) <0 ) - now = prev_time +1 ; + now = prev_time;/* * If in an NMI context then dont risk lockups and simply return
@@ -129,7 +129,7 @@ u64 notrace trace_clock_global(void)/* Reread prev_time in case it was already updated */ prev_time =READ_ONCE (trace_clock_struct.prev_time);if ((s64)(now - prev_time) <0 ) - now = prev_time +1 ; + now = prev_time; trace_clock_struct.prev_time = now;
net/can/bcm.c +51 -13
143 lines not on this page · raw message
net/can/raw.c +48 -14
123 lines not on this page · raw message
net/compat.c +1 -1
@@ -159,7 +159,7 @@ int cmsghdr_from_user_compat_to_kern(struct msghdr *kmsg, struct sock *sk,if (kcmlen > stackbuf_size) kcmsg_base = kcmsg =sock_kmalloc (sk, kcmlen,GFP_KERNEL );if (kcmsg ==NULL ) -return -ENOBUFS ; +return -ENOMEM ;/* Now copy them over neatly. */ memset (kcmsg,0 , kcmlen);
net/core/fib_rules.c +1 -1
@@ -695,7 +695,7 @@ static void notify_rule_change(int event, struct fib_rule *rule, {struct net *net;struct sk_buff *skb; -int err = -ENOBUFS ; +int err = -ENOMEM ; net = ops->fro_net; skb =nlmsg_new (fib_rule_nlmsg_size (ops, rule),GFP_KERNEL );
net/core/rtnetlink.c +4 -0
@@ -3240,6 +3240,10 @@ static int rtnl_bridge_notify(struct net_device *dev)if (err <0 ) goto errout; +/* Notification info is only filled for bridge ports, not the bridge +* device itself. Therefore, a zero notification length is valid and +* should not result in an error. +*/ if (!skb->len) goto errout;
net/ipv4/cipso_ipv4.c +1 -0
@@ -557,6 +557,7 @@ void cipso_v4_doi_free(struct cipso_v4_doi *doi_def)kfree (doi_def->map.std->lvl.local);kfree (doi_def->map.std->cat.cipso);kfree (doi_def->map.std->cat.local); +kfree (doi_def->map.std);break ; }kfree (doi_def);
net/ipv4/ipconfig.c +8 -5
@@ -890,7 +890,7 @@ static void __init ic_bootp_send_if(struct ic_device *d, unsigned long jiffies_d/* -* Copy BOOTP-supplied string if not already set. +* Copy BOOTP-supplied string */ static int __init ic_bootp_string (char *dest,char *src,int len,int max) {
@@ -941,12 +941,15 @@ static void __init ic_do_bootp_ext(u8 *ext) }break ;case 12 :/* Host name */ -ic_bootp_string (utsname ()->nodename, ext+1 , *ext, - __NEW_UTS_LEN); - ic_host_name_set =1 ; +if (!ic_host_name_set) { +ic_bootp_string (utsname ()->nodename, ext+1 , *ext, + __NEW_UTS_LEN); + ic_host_name_set =1 ; + }break ;case 15 :/* Domain name (DNS) */ -ic_bootp_string (ic_domain, ext+1 , *ext,sizeof (ic_domain)); +if (!ic_domain[0 ]) +ic_bootp_string (ic_domain, ext+1 , *ext,sizeof (ic_domain));break ;case 17 :/* Root path */ if (!root_server_path[0 ])
net/ipv4/ping.c +7 -5
@@ -978,6 +978,7 @@ bool ping_rcv(struct sk_buff *skb)struct sock *sk;struct net *net =dev_net (skb->dev);struct icmphdr *icmph =icmp_hdr (skb); +bool rc = false;/* We assume the packet has already been checked by icmp_rcv */
@@ -992,14 +993,15 @@ bool ping_rcv(struct sk_buff *skb)struct sk_buff *skb2 =skb_clone (skb,GFP_ATOMIC );pr_debug ("rcv on socket %p\n" , sk); -if (skb2) -ping_queue_rcv_skb (sk, skb2); +if (skb2 && !ping_queue_rcv_skb (sk, skb2)) + rc = true;sock_put (sk); -return true; } -pr_debug ("no socket, dropping\n" ); -return false; +if (!rc) +pr_debug ("no socket, dropping\n" ); + +return rc; }EXPORT_SYMBOL_GPL (ping_rcv);
net/ipv4/route.c +29 -13
73 lines not on this page · raw message
net/mac80211/rx.c +3 -6
@@ -1853,17 +1853,15 @@ ieee80211_rx_h_defragment(struct ieee80211_rx_data *rx) sc =le16_to_cpu (hdr->seq_ctrl); frag = sc &IEEE80211_SCTL_FRAG ; -if (is_multicast_ether_addr (hdr->addr1)) { -I802_DEBUG_INC (rx->local->dot11MulticastReceivedFrameCount); - goto out_no_led; - } -if (rx->sta) cache = &rx->sta->frags;if (likely (!ieee80211_has_morefrags (fc) && frag ==0 )) goto out; +if (is_multicast_ether_addr (hdr->addr1)) +return RX_DROP_MONITOR ; +I802_DEBUG_INC (rx->local->rx_handlers_fragments);if (skb_linearize (rx->skb))
@@ -1992,7 +1990,6 @@ ieee80211_rx_h_defragment(struct ieee80211_rx_data *rx) out:ieee80211_led_rx (rx->local); - out_no_led:if (rx->sta) rx->sta->rx_stats.packets++;return RX_CONTINUE ;
net/netfilter/nf_synproxy_core.c +5 -0
@@ -34,6 +34,9 @@ synproxy_parse_options(const struct sk_buff *skb, unsigned int doff,int length = (th->doff *4 ) -sizeof (*th);u8 buf[40 ], *ptr; +if (unlikely (length <0 )) +return false; + ptr =skb_header_pointer (skb, doff +sizeof (*th), length, buf);if (ptr ==NULL )return false;
@@ -50,6 +53,8 @@ synproxy_parse_options(const struct sk_buff *skb, unsigned int doff, length--;continue ;default : +if (length <2 ) +return true; opsize = *ptr++;if (opsize <2 )return true;
net/rds/recv.c +1 -1
@@ -482,7 +482,7 @@ int rds_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,if (rds_cmsg_recv (inc, msg)) { ret = -EFAULT ; - goto out; +break ; }rds_stats_inc (s_recv_delivered);
net/unix/af_unix.c +4 -3
@@ -534,12 +534,14 @@ static void unix_release_sock(struct sock *sk, int embrion) u->path.mnt =NULL ; state = sk->sk_state; sk->sk_state =TCP_CLOSE ; + + skpair =unix_peer (sk); +unix_peer (sk) =NULL ; +unix_state_unlock (sk);wake_up_interruptible_all (&u->peer_wait); - skpair =unix_peer (sk); -if (skpair !=NULL ) {if (sk->sk_type ==SOCK_STREAM || sk->sk_type ==SOCK_SEQPACKET ) {unix_state_lock (skpair);
@@ -554,7 +556,6 @@ static void unix_release_sock(struct sock *sk, int embrion)unix_dgram_peer_wake_disconnect (sk, skpair);sock_put (skpair);/* It may now die */ -unix_peer (sk) =NULL ; }/* Try to flush out this socket. Throw out buffers at least */
net/wireless/util.c +3 -0
@@ -978,6 +978,9 @@ int cfg80211_change_iface(struct cfg80211_registered_device *rdev,case NL80211_IFTYPE_MESH_POINT :/* mesh should be handled? */ break ; +case NL80211_IFTYPE_OCB : +cfg80211_leave_ocb (rdev, dev); +break ;default :break ; }
net/x25/af_x25.c +1 -1
@@ -550,7 +550,7 @@ static int x25_create(struct net *net, struct socket *sock, int protocol,if (protocol) goto out; - rc = -ENOBUFS ; + rc = -ENOMEM ;if ((sk =x25_alloc_socket (net, kern)) ==NULL ) goto out;