Linux 4.9.271
Greg Kroah-Hartman
maintainerDocumentation/sphinx/parse-headers.pl +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl use strict; use Text::Tabs;
Documentation/target/tcm_mod_builder.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # The TCM v4 multi-protocol fabric module generation script for drivers/target/$NEW_MOD # # Copyright (c) 2010 Rising Tide Systems
Documentation/trace/postprocess/decode_msr.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # add symbolic names to read_msr / write_msr in trace # decode_msr msr-index.h < trace import sys
Documentation/trace/postprocess/trace-pagealloc-postprocess.pl +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # This is a POC (proof of concept or piece of crap, take your pick) for reading the # text representation of trace output related to page allocation. It makes an attempt # to extract some high-level information on what is going on. The accuracy of the parser
Documentation/trace/postprocess/trace-vmscan-postprocess.pl +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # This is a POC for reading the text representation of trace output related to # page reclaim. It makes an attempt to extract some high-level information on # what is going on. The accuracy of the parser may vary
Makefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 4 PATCHLEVEL = 9 -SUBLEVEL = 270 +SUBLEVEL = 271 EXTRAVERSION = NAME = Roaring Lionus
arch/ia64/scripts/unwcheck.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # # Usage: unwcheck.py FILE #
arch/mips/alchemy/board-xxs1500.c +1 -0
@@ -30,6 +30,7 @@#include <asm/bootinfo.h> #include <asm/reboot.h> #include <asm/mach-au1x00/au1000.h> +#include <asm/mach-au1x00/gpio-au1000.h> #include <prom.h> const char *get_system_type (void )
arch/mips/ralink/of.c +2 -0
@@ -10,6 +10,7 @@#include <linux/io.h> #include <linux/clk.h> +#include <linux/export.h> #include <linux/init.h> #include <linux/sizes.h> #include <linux/of_fdt.h>
@@ -27,6 +28,7 @@__iomem void *rt_sysc_membase;__iomem void *rt_memc_membase; +EXPORT_SYMBOL_GPL (rt_sysc_membase);__iomem void *plat_of_remap_node (const char *node) {
arch/openrisc/include/asm/barrier.h new file +9 -0
@@ -0,0 +1,9 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __ASM_BARRIER_H +#define __ASM_BARRIER_H + +#define mb () asm volatile ("l.msync" ::: "memory") + +#include <asm-generic/barrier.h> + +#endif /* __ASM_BARRIER_H */
drivers/char/hpet.c +4 -0
@@ -976,6 +976,8 @@ static acpi_status hpet_resources(struct acpi_resource *res, void *data)if (ACPI_SUCCESS (status)) { hdp->hd_phys_address = addr.address.minimum; hdp->hd_address =ioremap (addr.address.minimum, addr.address.address_length); +if (!hdp->hd_address) +return AE_ERROR ;if (hpet_is_known (hdp)) {iounmap (hdp->hd_address);
@@ -989,6 +991,8 @@ static acpi_status hpet_resources(struct acpi_resource *res, void *data) hdp->hd_phys_address = fixmem32->address; hdp->hd_address =ioremap (fixmem32->address,HPET_RANGE_SIZE ); +if (!hdp->hd_address) +return AE_ERROR ;if (hpet_is_known (hdp)) {iounmap (hdp->hd_address);
drivers/dma/qcom/hidma_mgmt.c +14 -0
@@ -398,6 +398,20 @@ static int __init hidma_mgmt_init(void) of_node_put(child); }#endif +/* +* We do not check for return value here, as it is assumed that +* platform_driver_register must not fail. The reason for this is that +* the (potential) hidma_mgmt_of_populate_channels calls above are not +* cleaned up if it does fail, and to do this work is quite +* complicated. In particular, various calls of of_address_to_resource, +* of_irq_to_resource, platform_device_register_full, of_dma_configure, +* and of_msi_configure which then call other functions and so on, must +* be cleaned up - this is not a trivial exercise. +* +* Currently, this module is not intended to be unloaded, and there is +* no module_exit function defined which does the needed cleanup. For +* this reason, we have to assume success here. +*/ platform_driver_register (&hidma_mgmt_driver);return 0 ;
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +1 -0
@@ -886,6 +886,7 @@ static void amdgpu_ttm_tt_unpopulate(struct ttm_tt *ttm)if (gtt && gtt->userptr) {kfree (ttm->sg); + ttm->sg =NULL ; ttm->page_flags &= ~TTM_PAGE_FLAG_SG ;return ; }
drivers/i2c/busses/i2c-i801.c +2 -4
@@ -375,11 +375,9 @@ static int i801_check_post(struct i801_priv *priv, int status)dev_err (&priv->pci_dev->dev,"Transaction timeout\n" );/* try to stop the current command */ dev_dbg (&priv->pci_dev->dev,"Terminating the current operation\n" ); -outb_p (inb_p (SMBHSTCNT (priv)) |SMBHSTCNT_KILL , -SMBHSTCNT (priv)); +outb_p (SMBHSTCNT_KILL ,SMBHSTCNT (priv));usleep_range (1000 ,2000 ); -outb_p (inb_p (SMBHSTCNT (priv)) & (~SMBHSTCNT_KILL ), -SMBHSTCNT (priv)); +outb_p (0 ,SMBHSTCNT (priv));/* Check if it worked */ status =inb_p (SMBHSTSTS (priv));
drivers/i2c/busses/i2c-s3c2410.c +3 -0
@@ -495,7 +495,10 @@ static int i2c_s3c_irq_nextbyte(struct s3c24xx_i2c *i2c, unsigned long iicstat)* forces us to send a new START * when we change direction */ +dev_dbg (i2c->dev, +"missing START before write->read\n" );s3c24xx_i2c_stop (i2c, -EINVAL ); +break ; } goto retry_write;
drivers/iio/adc/ad7793.c +1 -0
@@ -279,6 +279,7 @@ static int ad7793_setup(struct iio_dev *indio_dev, id &=AD7793_ID_MASK ;if (id != st->chip_info->id) { + ret = -ENODEV ;dev_err (&st->sd.spi->dev,"device ID query failed\n" ); goto out; }
drivers/isdn/hardware/mISDN/mISDNinfineon.c +16 -8
@@ -645,17 +645,19 @@ static void release_io(struct inf_hw *hw) {if (hw->cfg.mode) { -if (hw->cfg.p) { +if (hw->cfg.mode ==AM_MEMIO ) {release_mem_region (hw->cfg.start, hw->cfg.size); -iounmap (hw->cfg.p); +if (hw->cfg.p) +iounmap (hw->cfg.p); }else release_region (hw->cfg.start, hw->cfg.size); hw->cfg.mode =AM_NONE ; }if (hw->addr.mode) { -if (hw->addr.p) { +if (hw->addr.mode ==AM_MEMIO ) {release_mem_region (hw->addr.start, hw->addr.size); -iounmap (hw->addr.p); +if (hw->addr.p) +iounmap (hw->addr.p); }else release_region (hw->addr.start, hw->addr.size); hw->addr.mode =AM_NONE ;
@@ -685,9 +687,12 @@ setup_io(struct inf_hw *hw) (ulong)hw->cfg.start, (ulong)hw->cfg.size);return err; } -if (hw->ci->cfg_mode ==AM_MEMIO ) - hw->cfg.p =ioremap (hw->cfg.start, hw->cfg.size); hw->cfg.mode = hw->ci->cfg_mode; +if (hw->ci->cfg_mode ==AM_MEMIO ) { + hw->cfg.p =ioremap (hw->cfg.start, hw->cfg.size); +if (!hw->cfg.p) +return -ENOMEM ; + }if (debug &DEBUG_HW ) pr_notice("%s: IO cfg %lx (%lu bytes) mode%d\n", hw->name, (ulong)hw->cfg.start,
@@ -712,9 +717,12 @@ setup_io(struct inf_hw *hw) (ulong)hw->addr.start, (ulong)hw->addr.size);return err; } -if (hw->ci->addr_mode ==AM_MEMIO ) - hw->addr.p =ioremap (hw->addr.start, hw->addr.size); hw->addr.mode = hw->ci->addr_mode; +if (hw->ci->addr_mode ==AM_MEMIO ) { + hw->addr.p =ioremap (hw->addr.start, hw->addr.size); +if (!hw->addr.p) +return -ENOMEM ; + }if (debug &DEBUG_HW ) pr_notice("%s: IO addr %lx (%lu bytes) mode%d\n", hw->name, (ulong)hw->addr.start,
drivers/md/dm-snap.c +1 -1
@@ -788,7 +788,7 @@ static int dm_add_exception(void *context, chunk_t old, chunk_t new)static uint32_t __minimum_chunk_size (struct origin *o) {struct dm_snapshot *snap; -unsigned chunk_size =0 ; +unsigned chunk_size =rounddown_pow_of_two (UINT_MAX );if (o)list_for_each_entry (snap, &o->snapshots, list)
drivers/media/dvb-frontends/sp8870.c +3 -1
@@ -293,7 +293,9 @@ static int sp8870_set_frontend_parameters(struct dvb_frontend *fe)sp8870_writereg (state,0xc05 , reg0xc05);// read status reg in order to clear pending irqs -sp8870_readreg (state,0x200 ); + err =sp8870_readreg (state,0x200 ); +if (err <0 ) +return err;// system controller start sp8870_microcontroller_start (state);
drivers/media/usb/gspca/m5602/m5602_po1030.c +7 -3
@@ -159,6 +159,7 @@ static const struct v4l2_ctrl_config po1030_greenbal_cfg = {int po1030_probe (struct sd *sd) {u8 dev_id_h =0 , i; +int err;struct gspca_dev *gspca_dev = (struct gspca_dev *)sd;if (force_sensor) {
@@ -177,10 +178,13 @@ int po1030_probe(struct sd *sd)for (i =0 ; i <ARRAY_SIZE (preinit_po1030); i++) {u8 data = preinit_po1030[i][2 ];if (preinit_po1030[i][0 ] ==SENSOR ) -m5602_write_sensor (sd, - preinit_po1030[i][1 ], &data,1 ); + err =m5602_write_sensor (sd, preinit_po1030[i][1 ], + &data,1 );else -m5602_write_bridge (sd, preinit_po1030[i][1 ], data); + err =m5602_write_bridge (sd, preinit_po1030[i][1 ], + data); +if (err <0 ) +return err; }if (m5602_read_sensor (sd,PO1030_DEVID_H , &dev_id_h,1 ))
drivers/misc/kgdbts.c +2 -1
@@ -110,8 +110,9 @@ printk(KERN_INFO a); \ }while (0 ) #define v2printk(a...) do { \ -if (verbose >1 ) \ +if (verbose >1 ) { \ printk(KERN_INFO a); \ + } \touch_nmi_watchdog (); \ } while (0) #define eprintk(a...) do { \
drivers/misc/lis3lv02d/lis3lv02d.h +1 -0
@@ -284,6 +284,7 @@ struct lis3lv02d {int regs_size;u8 *reg_cache;bool regs_stored; +bool init_required;u8 odr_mask;/* ODR bit mask */ u8 whoami;/* indicates measurement precision */ s16 (*read_data) (struct lis3lv02d *lis3,int reg);
drivers/misc/mei/interrupt.c +3 -0
@@ -226,6 +226,9 @@ static int mei_cl_irq_read(struct mei_cl *cl, struct mei_cl_cb *cb,return ret; } +pm_runtime_mark_last_busy (dev->dev); +pm_request_autosuspend (dev->dev); +list_move_tail (&cb->list, &cl->rd_pending);return 0 ;
drivers/net/caif/caif_serial.c +0 -1
@@ -281,7 +281,6 @@ static int caif_xmit(struct sk_buff *skb, struct net_device *dev) {struct ser_device *ser; -BUG_ON (dev ==NULL ); ser =netdev_priv (dev);/* Send flow off once, on high water mark */
drivers/net/ethernet/broadcom/bnx2.c +1 -1
@@ -8256,9 +8256,9 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)BNX2_WR (bp,PCI_COMMAND , reg); }else if ((BNX2_CHIP_ID (bp) ==BNX2_CHIP_ID_5706_A1 ) && !(bp->flags &BNX2_FLAG_PCIX )) { -dev_err (&pdev->dev,"5706 A1 can only be used in a PCIX bus, aborting\n" ); + rc = -EPERM ; goto err_out_unmap; }
drivers/net/ethernet/fujitsu/fmvj18x_cs.c +5 -0
@@ -548,6 +548,11 @@ static int fmvj18x_get_hwinfo(struct pcmcia_device *link, u_char *node_id)return -1 ; base =ioremap (link->resource[2 ]->start,resource_size (link->resource[2 ])); +if (!base) { +pcmcia_release_window (link, link->resource[2 ]); +return -1 ; + } +pcmcia_map_mem_page (link, link->resource[2 ],0 );/*
drivers/net/ethernet/mellanox/mlx4/en_ethtool.c +1 -3
@@ -1931,8 +1931,6 @@ static int mlx4_en_set_tunable(struct net_device *dev,return ret; } -#define MLX4_EEPROM_PAGE_LEN 256 -static int mlx4_en_get_module_info (struct net_device *dev,struct ethtool_modinfo *modinfo) {
@@ -1967,7 +1965,7 @@ static int mlx4_en_get_module_info(struct net_device *dev,break ;case MLX4_MODULE_ID_SFP : modinfo->type =ETH_MODULE_SFF_8472 ; - modinfo->eeprom_len =MLX4_EEPROM_PAGE_LEN ; + modinfo->eeprom_len =ETH_MODULE_SFF_8472_LEN ;break ;default :return -ENOSYS ;
drivers/net/ethernet/mellanox/mlx4/port.c +103 -4
138 lines not on this page · raw message
drivers/net/ethernet/ti/netcp_core.c +1 -1
@@ -1325,9 +1325,9 @@ int netcp_txpipe_open(struct netcp_tx_pipe *tx_pipe) tx_pipe->dma_queue =knav_queue_open (name, tx_pipe->dma_queue_id,KNAV_QUEUE_SHARED );if (IS_ERR (tx_pipe->dma_queue)) { + ret =PTR_ERR (tx_pipe->dma_queue);dev_err (dev,"Could not open DMA queue for channel \"%s\": %d\n" , name, ret); - ret =PTR_ERR (tx_pipe->dma_queue); goto err; }
drivers/net/phy/mdio-octeon.c +0 -2
@@ -75,7 +75,6 @@ static int octeon_mdiobus_probe(struct platform_device *pdev)return 0 ; fail_register: -mdiobus_free (bus->mii_bus); smi_en.u64 =0 ;oct_mdio_writeq (smi_en.u64, bus->register_base +SMI_EN );return err;
@@ -89,7 +88,6 @@ static int octeon_mdiobus_remove(struct platform_device *pdev) bus =platform_get_drvdata (pdev);mdiobus_unregister (bus->mii_bus); -mdiobus_free (bus->mii_bus); smi_en.u64 =0 ;oct_mdio_writeq (smi_en.u64, bus->register_base +SMI_EN );return 0 ;
drivers/net/phy/mdio-thunder.c +0 -1
@@ -129,7 +129,6 @@ static void thunder_mdiobus_pci_remove(struct pci_dev *pdev)continue ;mdiobus_unregister (bus->mii_bus); -mdiobus_free (bus->mii_bus);oct_mdio_writeq (0 , bus->register_base +SMI_EN ); }pci_set_drvdata (pdev,NULL );
drivers/net/usb/hso.c +2 -2
@@ -1703,7 +1703,7 @@ static int hso_serial_tiocmset(struct tty_struct *tty,spin_unlock_irqrestore (&serial->serial_lock, flags);return usb_control_msg (serial->parent->usb, -usb_rcvctrlpipe (serial->parent->usb,0 ),0x22 , +usb_sndctrlpipe (serial->parent->usb,0 ),0x22 ,0x21 , val, if_num,NULL ,0 ,USB_CTRL_SET_TIMEOUT ); }
@@ -2451,7 +2451,7 @@ static int hso_rfkill_set_block(void *data, bool blocked)if (hso_dev->usb_gone) rv =0 ;else - rv =usb_control_msg (hso_dev->usb,usb_rcvctrlpipe (hso_dev->usb,0 ), + rv =usb_control_msg (hso_dev->usb,usb_sndctrlpipe (hso_dev->usb,0 ), enabled ?0x82 :0x81 ,0x40 ,0 ,0 ,NULL ,0 ,USB_CTRL_SET_TIMEOUT );mutex_unlock (&hso_dev->mutex);
drivers/net/usb/smsc75xx.c +6 -2
@@ -1497,7 +1497,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" ); -return ret; + goto err; }smsc75xx_init_mac_address (dev);
@@ -1506,7 +1506,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); -return ret; + goto err; } dev->net->netdev_ops = &smsc75xx_netdev_ops;
@@ -1515,6 +1515,10 @@ static int smsc75xx_bind(struct usbnet *dev, struct usb_interface *intf) dev->net->hard_header_len +=SMSC75XX_TX_OVERHEAD ; dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len;return 0 ; + +err: +kfree (pdata); +return ret; }static void smsc75xx_unbind (struct usbnet *dev,struct usb_interface *intf)
drivers/net/wireless/ath/ath10k/htt_rx.c +57 -4
77 lines not on this page · raw message
drivers/net/wireless/marvell/libertas/mesh.c +4 -24
@@ -797,19 +797,6 @@ static const struct attribute_group mesh_ie_group = { .attrs = mesh_ie_attrs, }; -static void lbs_persist_config_init (struct net_device *dev) -{ -int ret; - ret =sysfs_create_group (&(dev->dev.kobj), &boot_opts_group); - ret =sysfs_create_group (&(dev->dev.kobj), &mesh_ie_group); -} - -static void lbs_persist_config_remove (struct net_device *dev) -{ -sysfs_remove_group (&(dev->dev.kobj), &boot_opts_group); -sysfs_remove_group (&(dev->dev.kobj), &mesh_ie_group); -} -/*************************************************************************** * Initializing and starting, stopping mesh
@@ -1021,6 +1008,10 @@ static int lbs_add_mesh(struct lbs_private *priv)SET_NETDEV_DEV (priv->mesh_dev, priv->dev->dev.parent); mesh_dev->flags |=IFF_BROADCAST |IFF_MULTICAST ; + mesh_dev->sysfs_groups[0 ] = &lbs_mesh_attr_group; + mesh_dev->sysfs_groups[1 ] = &boot_opts_group; + mesh_dev->sysfs_groups[2 ] = &mesh_ie_group; +/* Register virtual mesh interface */ ret =register_netdev (mesh_dev);if (ret) {
@@ -1028,19 +1019,10 @@ static int lbs_add_mesh(struct lbs_private *priv) goto err_free_netdev; } - ret =sysfs_create_group (&(mesh_dev->dev.kobj), &lbs_mesh_attr_group); -if (ret) - goto err_unregister; - -lbs_persist_config_init (mesh_dev); -/* Everything successful */ ret =0 ; goto done; -err_unregister: -unregister_netdev (mesh_dev); - err_free_netdev:free_netdev (mesh_dev);
@@ -1063,8 +1045,6 @@ void lbs_remove_mesh(struct lbs_private *priv)lbs_deb_enter (LBS_DEB_MESH );netif_stop_queue (mesh_dev);netif_carrier_off (mesh_dev); -sysfs_remove_group (&(mesh_dev->dev.kobj), &lbs_mesh_attr_group); -lbs_persist_config_remove (mesh_dev);unregister_netdev (mesh_dev); priv->mesh_dev =NULL ;kfree (mesh_dev->ieee80211_ptr);
drivers/platform/x86/hp_accel.c +21 -1
@@ -101,6 +101,9 @@ MODULE_DEVICE_TABLE(acpi, lis3lv02d_device_ids);static int lis3lv02d_acpi_init (struct lis3lv02d *lis3) {struct acpi_device *dev = lis3->bus_priv; +if (!lis3->init_required) +return 0 ; +if (acpi_evaluate_object (dev->handle,METHOD_NAME__INI ,NULL ,NULL ) !=AE_OK )return -EINVAL ;
@@ -366,6 +369,7 @@ static int lis3lv02d_add(struct acpi_device *device) }/* call the core layer do its init */ + lis3_dev.init_required = true; ret =lis3lv02d_init_device (&lis3_dev);if (ret)return ret;
@@ -413,11 +417,27 @@ static int lis3lv02d_suspend(struct device *dev)static int lis3lv02d_resume (struct device *dev) { + lis3_dev.init_required = false; +lis3lv02d_poweron (&lis3_dev); +return 0 ; +} + +static int lis3lv02d_restore (struct device *dev) +{ + lis3_dev.init_required = true;lis3lv02d_poweron (&lis3_dev);return 0 ; } -static SIMPLE_DEV_PM_OPS(hp_accel_pm, lis3lv02d_suspend, lis3lv02d_resume); +static const struct dev_pm_ops hp_accel_pm = { + .suspend = lis3lv02d_suspend, + .resume = lis3lv02d_resume, + .freeze = lis3lv02d_suspend, + .thaw = lis3lv02d_resume, + .poweroff = lis3lv02d_suspend, + .restore = lis3lv02d_restore, +}; +#define HP_ACCEL_PM (&hp_accel_pm)#else #define HP_ACCEL_PM NULL
drivers/platform/x86/intel_punit_ipc.c +1 -0
@@ -330,6 +330,7 @@ static const struct acpi_device_id punit_ipc_acpi_ids[] = { { "INT34D4", 0 }, { } }; +MODULE_DEVICE_TABLE (acpi, punit_ipc_acpi_ids);static struct platform_driver intel_punit_ipc_driver = { .probe = intel_punit_ipc_probe,
drivers/scsi/BusLogic.c +3 -3
@@ -3081,11 +3081,11 @@ static int blogic_qcmd_lck(struct scsi_cmnd *command, ccb->opcode =BLOGIC_INITIATOR_CCB_SG ; ccb->datalen = count *sizeof (struct blogic_sg_seg );if (blogic_multimaster_type (adapter)) - ccb->data = (void *)((unsigned int ) ccb->dma_handle + + ccb->data = (unsigned int ) ccb->dma_handle + ((unsigned long ) &ccb->sglist - - (unsigned long ) ccb)); + (unsigned long ) ccb);else - ccb->data = ccb->sglist; + ccb->data =virt_to_32bit_virt (ccb->sglist);scsi_for_each_sg (command, sg, count, i) { ccb->sglist[i].segbytes =sg_dma_len (sg);
drivers/scsi/BusLogic.h +1 -1
@@ -821,7 +821,7 @@ struct blogic_ccb {unsigned char cdblen;/* Byte 2 */ unsigned char sense_datalen;/* Byte 3 */ u32 datalen;/* Bytes 4-7 */ -void *data;/* Bytes 8-11 */ +u32 data;/* Bytes 8-11 */ unsigned char:8; /* Byte 12 */ unsigned char:8; /* Byte 13 */enum blogic_adapter_status adapter_status;/* Byte 14 */
drivers/scsi/libsas/sas_port.c +2 -2
@@ -41,7 +41,7 @@ static bool phy_is_wideport_member(struct asd_sas_port *port, struct asd_sas_phystatic void sas_resume_port (struct asd_sas_phy *phy) { -struct domain_device *dev; +struct domain_device *dev, *n;struct asd_sas_port *port = phy->port;struct sas_ha_struct *sas_ha = phy->ha;struct sas_internal *si =to_sas_internal (sas_ha->core.shost->transportt);
@@ -60,7 +60,7 @@ static void sas_resume_port(struct asd_sas_phy *phy)* 1/ presume every device came back * 2/ force the next revalidation to check all expander phys */ -list_for_each_entry (dev, &port->dev_list, dev_list_node) { +list_for_each_entry_safe (dev, n, &port->dev_list, dev_list_node) {int i, rc; rc =sas_notify_lldd_dev_found (dev);
drivers/spi/spi.c +2 -7
@@ -1869,6 +1869,7 @@ struct spi_master *devm_spi_alloc_master(struct device *dev, unsigned int size) master =spi_alloc_master (dev, size);if (master) { + master->devm_allocated = true; *ptr = master;devres_add (dev, ptr); }else {
@@ -2059,11 +2060,6 @@ int devm_spi_register_master(struct device *dev, struct spi_master *master) }EXPORT_SYMBOL_GPL (devm_spi_register_master); -static int devm_spi_match_master (struct device *dev,void *res,void *master) -{ -return *(struct spi_master **)res == master; -} -static int __unregister (struct device *dev,void *null) {spi_unregister_device (to_spi_device (dev));
@@ -2102,8 +2098,7 @@ void spi_unregister_master(struct spi_master *master)/* Release the last reference on the master if its driver * has not yet been converted to devm_spi_alloc_master(). */ -if (!devres_find (master->dev.parent, devm_spi_release_master, - devm_spi_match_master, master)) +if (!master->devm_allocated)put_device (&master->dev);if (IS_ENABLED (CONFIG_SPI_DYNAMIC ))
drivers/staging/emxx_udc/emxx_udc.c +2 -2
@@ -2173,7 +2173,7 @@ static int _nbu2ss_nuke(struct nbu2ss_udc *udc, struct nbu2ss_ep *ep, int status) { -struct nbu2ss_req *req; +struct nbu2ss_req *req, *n;/* Endpoint Disable */ _nbu2ss_epn_exit (udc, ep);
@@ -2185,7 +2185,7 @@ static int _nbu2ss_nuke(struct nbu2ss_udc *udc,return 0 ;/* called with irqs blocked */ -list_for_each_entry (req, &ep->queue, queue) { +list_for_each_entry_safe (req, n, &ep->queue, queue) {_nbu2ss_ep_done (ep, req, status); }
drivers/staging/iio/cdc/ad7746.c +0 -1
@@ -714,7 +714,6 @@ static int ad7746_probe(struct i2c_client *client, indio_dev->num_channels =ARRAY_SIZE (ad7746_channels); else indio_dev->num_channels = ARRAY_SIZE(ad7746_channels) - 2; - indio_dev->num_channels =ARRAY_SIZE (ad7746_channels); indio_dev->modes =INDIO_DIRECT_MODE ;if (pdata) {
drivers/tty/serial/max310x.c +4 -2
@@ -1385,10 +1385,12 @@ static int __init max310x_uart_init(void)return ret;#ifdef CONFIG_SPI_MASTER -spi_register_driver (&max310x_spi_driver); + ret =spi_register_driver (&max310x_spi_driver); +if (ret) +uart_unregister_driver (&max310x_uart);#endif -return 0 ; +return ret; }module_init (max310x_uart_init);
drivers/tty/serial/rp2.c +17 -35
99 lines not on this page · raw message
drivers/usb/core/hub.h +4 -2
@@ -151,8 +151,10 @@ static inline unsigned hub_power_on_good_delay(struct usb_hub *hub) {unsigned delay = hub->descriptor->bPwrOn2PwrGood *2 ; -/* Wait at least 100 msec for power to become stable */ -return max (delay,100U ); +if (!hub->hdev->parent)/* root hub */ +return delay; +else /* Wait at least 100 msec for power to become stable */ +return max (delay,100U ); } static inline int hub_port_debounce_be_connected(struct usb_hub *hub,
drivers/usb/misc/trancevibrator.c +2 -2
@@ -74,9 +74,9 @@ static ssize_t set_speed(struct device *dev, struct device_attribute *attr,/* Set speed */ retval =usb_control_msg (tv->udev,usb_sndctrlpipe (tv->udev,0 ),0x01 ,/* vendor request: set speed */ -USB_DIR_IN |USB_TYPE_VENDOR |USB_RECIP_OTHER , +USB_DIR_OUT |USB_TYPE_VENDOR |USB_RECIP_OTHER , tv->speed,/* speed value */ -0 ,NULL ,0 ,USB_CTRL_GET_TIMEOUT ); +0 ,NULL ,0 ,USB_CTRL_SET_TIMEOUT );if (retval) { tv->speed = old;dev_dbg (&tv->udev->dev,"retval = %d\n" , retval);
drivers/usb/misc/uss720.c +1 -0
@@ -750,6 +750,7 @@ static int uss720_probe(struct usb_interface *intf,parport_announce_port (pp);usb_set_intfdata (intf, pp); +usb_put_dev (usbdev);return 0 ; probe_abort:
drivers/usb/serial/ftdi_sio.c +3 -0
@@ -1029,6 +1029,9 @@ static const struct usb_device_id id_table_combined[] = {/* Sienna devices */ { USB_DEVICE(FTDI_VID, FTDI_SIENNA_PID) }, { USB_DEVICE(ECHELON_VID, ECHELON_U20_PID) }, +/* IDS GmbH devices */ + { USB_DEVICE(IDS_VID, IDS_SI31A_PID) }, + { USB_DEVICE(IDS_VID, IDS_CM31A_PID) },/* U-Blox devices */ { USB_DEVICE(UBLOX_VID, UBLOX_C099F9P_ZED_PID) }, { USB_DEVICE(UBLOX_VID, UBLOX_C099F9P_ODIN_PID) },
drivers/usb/serial/ftdi_sio_ids.h +7 -0
@@ -1566,6 +1566,13 @@#define UNJO_VID 0x22B7#define UNJO_ISODEBUG_V1_PID 0x150D +/* +* IDS GmbH +*/ +#define IDS_VID 0x2CAF +#define IDS_SI31A_PID 0x13A2 +#define IDS_CM31A_PID 0x13A3 +/* * U-Blox products (http://www.u-blox.com). */
drivers/usb/serial/option.c +4 -0
@@ -1222,6 +1222,10 @@ static const struct usb_device_id option_ids[] = { .driver_info = NCTRL(0) | RSVD(1) }, { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1901, 0xff), /* Telit LN940 (MBIM) */ .driver_info = NCTRL(0) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x7010, 0xff), /* Telit LE910-S1 (RNDIS) */ + .driver_info = NCTRL(2) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x7011, 0xff), /* Telit LE910-S1 (ECM) */ + .driver_info = NCTRL(2) }, { USB_DEVICE(TELIT_VENDOR_ID, 0x9010), /* Telit SBL FN980 flashing device */ .driver_info = NCTRL(0) | ZLP }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */
drivers/usb/serial/pl2303.c +1 -0
@@ -102,6 +102,7 @@ static const struct usb_device_id id_table[] = { { USB_DEVICE(SONY_VENDOR_ID, SONY_QN3USB_PRODUCT_ID) }, { USB_DEVICE(SANWA_VENDOR_ID, SANWA_PRODUCT_ID) }, { USB_DEVICE(ADLINK_VENDOR_ID, ADLINK_ND6530_PRODUCT_ID) }, + { USB_DEVICE(ADLINK_VENDOR_ID, ADLINK_ND6530GC_PRODUCT_ID) }, { USB_DEVICE(SMART_VENDOR_ID, SMART_PRODUCT_ID) }, { USB_DEVICE(AT_VENDOR_ID, AT_VTKIT3_PRODUCT_ID) }, { } /* Terminating entry */
drivers/usb/serial/pl2303.h +1 -0
@@ -156,6 +156,7 @@/* ADLINK ND-6530 RS232,RS485 and RS422 adapter */ #define ADLINK_VENDOR_ID 0x0b63#define ADLINK_ND6530_PRODUCT_ID 0x6530 +#define ADLINK_ND6530GC_PRODUCT_ID 0x653a/* SMART USB Serial Adapter */ #define SMART_VENDOR_ID 0x0b8c
drivers/usb/serial/ti_usb_3410_5052.c +3 -0
@@ -41,6 +41,7 @@/* Vendor and product ids */ #define TI_VENDOR_ID 0x0451#define IBM_VENDOR_ID 0x04b3 +#define STARTECH_VENDOR_ID 0x14b0#define TI_3410_PRODUCT_ID 0x3410#define IBM_4543_PRODUCT_ID 0x4543#define IBM_454B_PRODUCT_ID 0x454b
@@ -378,6 +379,7 @@ static const struct usb_device_id ti_id_table_3410[] = { { USB_DEVICE(MXU1_VENDOR_ID, MXU1_1131_PRODUCT_ID) }, { USB_DEVICE(MXU1_VENDOR_ID, MXU1_1150_PRODUCT_ID) }, { USB_DEVICE(MXU1_VENDOR_ID, MXU1_1151_PRODUCT_ID) }, + { USB_DEVICE(STARTECH_VENDOR_ID, TI_3410_PRODUCT_ID) }, { } /* terminator */ };
@@ -416,6 +418,7 @@ static const struct usb_device_id ti_id_table_combined[] = { { USB_DEVICE(MXU1_VENDOR_ID, MXU1_1131_PRODUCT_ID) }, { USB_DEVICE(MXU1_VENDOR_ID, MXU1_1150_PRODUCT_ID) }, { USB_DEVICE(MXU1_VENDOR_ID, MXU1_1151_PRODUCT_ID) }, + { USB_DEVICE(STARTECH_VENDOR_ID, TI_3410_PRODUCT_ID) }, { } /* terminator */ };
fs/btrfs/tree-log.c +0 -2
@@ -1600,8 +1600,6 @@ static noinline int link_to_fixup_dir(struct btrfs_trans_handle *trans, ret =btrfs_update_inode (trans, root, inode); }else if (ret == -EEXIST ) { ret =0 ; - }else { -BUG ();/* Logic Error */ }iput (inode);
fs/hugetlbfs/inode.c +2 -2
@@ -451,7 +451,7 @@ static void remove_inode_hugepages(struct inode *inode, loff_t lstart,if (next >= end)break ; - hash =hugetlb_fault_mutex_hash (h, mapping, next,0 ); + hash =hugetlb_fault_mutex_hash (h, mapping, next);mutex_lock (&hugetlb_fault_mutex_table[hash]);/*
@@ -634,7 +634,7 @@ static long hugetlbfs_fallocate(struct file *file, int mode, loff_t offset, addr = index * hpage_size;/* mutex taken here, fault path and hole punch */ - hash =hugetlb_fault_mutex_hash (h, mapping, index, addr); + hash =hugetlb_fault_mutex_hash (h, mapping, index);mutex_lock (&hugetlb_fault_mutex_table[hash]);/* See if already present in mapping to avoid alloc/free */
fs/nfs/filelayout/filelayout.c +1 -1
@@ -726,7 +726,7 @@ filelayout_decode_layout(struct pnfs_layout_hdr *flo,if (unlikely (!p)) goto out_err; fl->fh_array[i]->size =be32_to_cpup (p++); -if (sizeof (struct nfs_fh ) < fl->fh_array[i]->size) { +if (fl->fh_array[i]->size >NFS_MAXFHSIZE ) {printk (KERN_ERR "NFS: Too big fh %d received %d\n" , i, fl->fh_array[i]->size); goto out_err;
fs/nfs/nfs4file.c +1 -1
@@ -147,7 +147,7 @@ static loff_t nfs4_file_llseek(struct file *filep, loff_t offset, int whence)case SEEK_HOLE :case SEEK_DATA : ret =nfs42_proc_llseek (filep, offset, whence); -if (ret != -ENOTSUPP ) +if (ret != -EOPNOTSUPP )return ret;default :return nfs_file_llseek (filep, offset, whence);
fs/nfs/pagelist.c +5 -7
@@ -952,17 +952,16 @@ static void nfs_pageio_doio(struct nfs_pageio_descriptor *desc) {struct nfs_pgio_mirror *mirror =nfs_pgio_current_mirror (desc); -if (!list_empty (&mirror->pg_list)) {int error = desc->pg_ops->pg_doio (desc);if (error <0 ) desc->pg_error = error; -else +if (list_empty (&mirror->pg_list)) { mirror->pg_bytes_written += mirror->pg_count; - } -if (list_empty (&mirror->pg_list)) { - mirror->pg_count =0 ; - mirror->pg_base =0 ; + mirror->pg_count =0 ; + mirror->pg_base =0 ; + mirror->pg_recoalesce =0 ; + } } }
@@ -1061,7 +1060,6 @@ static int nfs_do_recoalesce(struct nfs_pageio_descriptor *desc) do { list_splice_init(&mirror->pg_list, &head); - mirror->pg_bytes_written -= mirror->pg_count; mirror->pg_count = 0; mirror->pg_base = 0; mirror->pg_recoalesce = 0;
fs/nfs/pnfs.c +8 -9
@@ -1070,6 +1070,11 @@ _pnfs_return_layout(struct inode *ino) {struct pnfs_layout_hdr *lo =NULL ;struct nfs_inode *nfsi =NFS_I (ino); +struct pnfs_layout_range range = { + .iomode =IOMODE_ANY , + .offset =0 , + .length =NFS4_MAX_UINT64 , + };LIST_HEAD (tmp_list);nfs4_stateid stateid;int status =0 , empty;
@@ -1088,16 +1093,10 @@ _pnfs_return_layout(struct inode *ino)pnfs_get_layout_hdr (lo); empty =list_empty (&lo->plh_segs);pnfs_clear_layoutcommit (ino, &tmp_list); -pnfs_mark_matching_lsegs_return (lo, &tmp_list,NULL ,0 ); - -if (NFS_SERVER (ino)->pnfs_curr_ld->return_range) { -struct pnfs_layout_range range = { - .iomode =IOMODE_ANY , - .offset =0 , - .length =NFS4_MAX_UINT64 , - }; +pnfs_mark_matching_lsegs_return (lo, &tmp_list, &range,0 ); + +if (NFS_SERVER (ino)->pnfs_curr_ld->return_range)NFS_SERVER (ino)->pnfs_curr_ld->return_range (lo, &range); - }/* Don't send a LAYOUTRETURN if list was initially empty */ if (empty) {
fs/proc/base.c +4 -0
@@ -2522,6 +2522,10 @@ static ssize_t proc_pid_attr_write(struct file * file, const char __user * buf,ssize_t length;struct task_struct *task =get_proc_task (inode); +/* A task may only write when it was the opener. */ +if (file->f_cred !=current_real_cred ()) +return -EPERM ; + length = -ESRCH ;if (!task) goto out_no_task;
include/linux/hugetlb.h +1 -1
@@ -93,7 +93,7 @@ void free_huge_page(struct page *page);void hugetlb_fix_reserve_counts (struct inode *inode);extern struct mutex *hugetlb_fault_mutex_table;u32 hugetlb_fault_mutex_hash (struct hstate *h,struct address_space *mapping, -pgoff_t idx,unsigned long address); +pgoff_t idx);pte_t *huge_pmd_share (struct mm_struct *mm,unsigned long addr,pud_t *pud);
include/linux/netfilter/x_tables.h +1 -1
@@ -334,7 +334,7 @@ static inline unsigned int xt_write_recseq_begin(void)* since addend is most likely 1 */ __this_cpu_add (xt_recseq.sequence, addend); -smp_wmb (); +smp_mb ();return addend; }
include/linux/spi/spi.h +3 -0
@@ -443,6 +443,9 @@ struct spi_master {#define SPI_MASTER_MUST_RX BIT(3)/* requires rx */ #define SPI_MASTER_MUST_TX BIT(4)/* requires tx */ +/* flag indicating this is a non-devres managed controller */ +bool devm_allocated; +/* * on some hardware transfer / message size may be constrained * the limit may depend on device transfer settings
include/net/cfg80211.h +3 -2
@@ -4056,7 +4056,8 @@ unsigned int ieee80211_get_mesh_hdrlen(struct ieee80211s_hdr *meshhdr);* Return: 0 on success. Non-zero on error. */ int ieee80211_data_to_8023_exthdr (struct sk_buff *skb,struct ethhdr *ehdr, -const u8 *addr,enum nl80211_iftype iftype); +const u8 *addr,enum nl80211_iftype iftype, +bool is_amsdu);/** * ieee80211_data_to_8023 - convert an 802.11 data frame to 802.3
@@ -4068,7 +4069,7 @@ int ieee80211_data_to_8023_exthdr(struct sk_buff *skb, struct ethhdr *ehdr,static inline int ieee80211_data_to_8023 (struct sk_buff *skb,const u8 *addr,enum nl80211_iftype iftype) { -return ieee80211_data_to_8023_exthdr (skb,NULL , addr, iftype); +return ieee80211_data_to_8023_exthdr (skb,NULL , addr, iftype, false); }/**
include/net/nfc/nci_core.h +1 -0
@@ -310,6 +310,7 @@ int nci_nfcc_loopback(struct nci_dev *ndev, void *data, size_t data_len, struct sk_buff **resp);struct nci_hci_dev *nci_hci_allocate (struct nci_dev *ndev); +void nci_hci_deallocate (struct nci_dev *ndev);int nci_hci_send_event (struct nci_dev *ndev,u8 gate,u8 event,const u8 *param,size_t param_len); int nci_hci_send_cmd(struct nci_dev *ndev, u8 gate,
mm/hugetlb.c +4 -4
@@ -3887,7 +3887,7 @@ static int hugetlb_no_page(struct mm_struct *mm, struct vm_area_struct *vma,#ifdef CONFIG_SMP u32 hugetlb_fault_mutex_hash (struct hstate *h,struct address_space *mapping, -pgoff_t idx,unsigned long address) +pgoff_t idx) {unsigned long key[2 ];u32 hash;
@@ -3895,7 +3895,7 @@ u32 hugetlb_fault_mutex_hash(struct hstate *h, struct address_space *mapping, key[0 ] = (unsigned long ) mapping; key[1 ] = idx; - hash =jhash2 ((u32 *)&key,sizeof (key)/sizeof (u32),0 ); + hash =jhash2 ((u32 *)&key,sizeof (key)/(sizeof (u32)),0 );return hash & (num_fault_mutexes -1 ); }
@@ -3905,7 +3905,7 @@ u32 hugetlb_fault_mutex_hash(struct hstate *h, struct address_space *mapping,* return 0 and avoid the hashing overhead. */ u32 hugetlb_fault_mutex_hash (struct hstate *h,struct address_space *mapping, -pgoff_t idx,unsigned long address) +pgoff_t idx) {return 0 ; }
@@ -3950,7 +3950,7 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,* get spurious allocation failures if two CPUs race to instantiate * the same page in the page cache. */ - hash =hugetlb_fault_mutex_hash (h, mapping, idx, address); + hash =hugetlb_fault_mutex_hash (h, mapping, idx);mutex_lock (&hugetlb_fault_mutex_table[hash]); entry =huge_ptep_get (ptep);
mm/vmstat.c +3 -0
@@ -1178,6 +1178,9 @@ static void pagetypeinfo_showfree_print(struct seq_file *m,list_for_each (curr, &area->free_list[mtype]) freecount++;seq_printf (m,"%6lu " , freecount); +spin_unlock_irq (&zone->lock); +cond_resched (); +spin_lock_irq (&zone->lock); }seq_putc (m,'\n' ); }
net/bluetooth/cmtp/core.c +5 -0
@@ -391,6 +391,11 @@ int cmtp_add_connection(struct cmtp_connadd_req *req, struct socket *sock)if (!(session->flags &BIT (CMTP_LOOPBACK ))) { err =cmtp_attach_device (session);if (err <0 ) { +/* Caller will call fput in case of failure, and so +* will cmtp_session kthread. +*/ +get_file (session->sock->file); +atomic_inc (&session->terminate);wake_up_interruptible (sk_sleep (session->sock->sk));up_write (&cmtp_session_sem);
net/ipv6/mcast.c +0 -3
@@ -1580,10 +1580,7 @@ static struct sk_buff *mld_newpack(struct inet6_dev *idev, unsigned int mtu) IPV6_TLV_PADN, 0 };/* we assume size > sizeof(ra) here */ -/* limit our allocations to order-0 page */ - size =min_t (int, size,SKB_MAX_ORDER (0 ,0 )); skb =sock_alloc_send_skb (sk, size,1 , &err); -if (!skb)return NULL ;
net/mac80211/ieee80211_i.h +13 -23
@@ -52,12 +52,6 @@ struct ieee80211_local;#define IEEE80211_ENCRYPT_HEADROOM 8#define IEEE80211_ENCRYPT_TAILROOM 18 -/* IEEE 802.11 (Ch. 9.5 Defragmentation) requires support for concurrent -* reception of at least three fragmented frames. This limit can be increased -* by changing this define, at the cost of slower frame reassembly and -* increased memory use (about 2 kB of RAM per entry). */ -#define IEEE80211_FRAGMENT_MAX 4 -/* power level hasn't been configured (or set to automatic) */ #define IEEE80211_UNSET_POWER_LEVEL INT_MIN
@@ -88,18 +82,6 @@ struct ieee80211_local;#define IEEE80211_MAX_NAN_INSTANCE_ID 255 -struct ieee80211_fragment_entry { -struct sk_buff_head skb_list; -unsigned long first_frag_time; -u16 seq; -u16 extra_len; -u16 last_frag; -u8 rx_queue; -bool check_sequential_pn;/* needed for CCMP/GCMP */ -u8 last_pn[6 ];/* PN of the last fragment if CCMP was used */ -}; - -struct ieee80211_bss {u32 device_ts_beacon, device_ts_presp;
@@ -239,8 +221,15 @@ struct ieee80211_rx_data {*/ int security_idx; -u32 tkip_iv32; -u16 tkip_iv16; +union { +struct { +u32 iv32; +u16 iv16; + } tkip; +struct { +u8 pn[IEEE80211_CCMP_PN_LEN ]; + } ccm_gcm; + }; };struct ieee80211_csa_settings {
@@ -869,9 +858,7 @@ struct ieee80211_sub_if_data {char name[IFNAMSIZ ]; -/* Fragment table for host-based reassembly */ -struct ieee80211_fragment_entry fragments[IEEE80211_FRAGMENT_MAX ]; -unsigned int fragment_next; +struct ieee80211_fragment_cache frags;/* TID bitmap for NoAck policy */ u16 noack_map;
@@ -2136,4 +2123,7 @@ extern const struct ethtool_ops ieee80211_ethtool_ops;#define debug_noinline#endif +void ieee80211_init_frag_cache (struct ieee80211_fragment_cache *cache); +void ieee80211_destroy_frag_cache (struct ieee80211_fragment_cache *cache); +#endif /* IEEE80211_I_H */
net/mac80211/iface.c +2 -7
@@ -1120,16 +1120,12 @@ static void ieee80211_set_multicast_list(struct net_device *dev)*/ static void ieee80211_teardown_sdata (struct ieee80211_sub_if_data *sdata) { -int i; -/* free extra data */ ieee80211_free_keys (sdata, false);ieee80211_debugfs_remove_netdev (sdata); -for (i =0 ; i <IEEE80211_FRAGMENT_MAX ; i++) -__skb_queue_purge (&sdata->fragments[i].skb_list); - sdata->fragment_next =0 ; +ieee80211_destroy_frag_cache (&sdata->frags);if (ieee80211_vif_is_mesh (&sdata->vif))ieee80211_mesh_teardown_sdata (sdata);
@@ -1863,8 +1859,7 @@ int ieee80211_if_add(struct ieee80211_local *local, const char *name, sdata->wdev.wiphy = local->hw.wiphy; sdata->local = local; -for (i =0 ; i <IEEE80211_FRAGMENT_MAX ; i++) -skb_queue_head_init (&sdata->fragments[i].skb_list); +ieee80211_init_frag_cache (&sdata->frags);INIT_LIST_HEAD (&sdata->key_list);
net/mac80211/key.c +7 -0
@@ -647,6 +647,7 @@ int ieee80211_key_link(struct ieee80211_key *key, struct sta_info *sta) {struct ieee80211_local *local = sdata->local; +static atomic_t key_color =ATOMIC_INIT (0 );struct ieee80211_key *old_key;int idx = key->conf.keyidx;bool pairwise = key->conf.flags &IEEE80211_KEY_FLAG_PAIRWISE ;
@@ -658,6 +659,12 @@ int ieee80211_key_link(struct ieee80211_key *key,bool delay_tailroom = sdata->vif.type ==NL80211_IFTYPE_STATION ;int ret; +/* +* Assign a unique ID to every key so we can easily prevent mixed +* key and fragment cache attacks. +*/ + key->color =atomic_inc_return (&key_color); +mutex_lock (&sdata->local->key_mtx);if (sta && pairwise)
net/mac80211/key.h +2 -0
@@ -127,6 +127,8 @@ struct ieee80211_key { } debugfs;#endif +unsigned int color; +/* * key config, must be last because it contains key * material as variable length member
net/mac80211/rx.c +118 -33
275 lines not on this page · raw message
net/mac80211/sta_info.c +4 -0
@@ -366,6 +366,8 @@ struct sta_info *sta_info_alloc(struct ieee80211_sub_if_data *sdata,u64_stats_init (&sta->rx_stats.syncp); +ieee80211_init_frag_cache (&sta->frags); + sta->sta_state =IEEE80211_STA_NONE ;/* Mark TID as unreserved */
@@ -999,6 +1001,8 @@ static void __sta_info_destroy_part2(struct sta_info *sta)rate_control_remove_sta_debugfs (sta);ieee80211_sta_debugfs_remove (sta); +ieee80211_destroy_frag_cache (&sta->frags); +cleanup_single_sta (sta); }
net/mac80211/sta_info.h +31 -0
@@ -391,6 +391,34 @@ struct ieee80211_sta_rx_stats {u64 msdu[IEEE80211_NUM_TIDS +1 ]; }; +/* +* IEEE 802.11-2016 (10.6 "Defragmentation") recommends support for "concurrent +* reception of at least one MSDU per access category per associated STA" +* on APs, or "at least one MSDU per access category" on other interface types. +* +* This limit can be increased by changing this define, at the cost of slower +* frame reassembly and increased memory use while fragments are pending. +*/ +#define IEEE80211_FRAGMENT_MAX 4 + +struct ieee80211_fragment_entry { +struct sk_buff_head skb_list; +unsigned long first_frag_time; +u16 seq; +u16 extra_len; +u16 last_frag; +u8 rx_queue; +u8 check_sequential_pn:1 ,/* needed for CCMP/GCMP */ + is_protected:1 ; +u8 last_pn[6 ];/* PN of the last fragment if CCMP was used */ +unsigned int key_color; +}; + +struct ieee80211_fragment_cache { +struct ieee80211_fragment_entry entries[IEEE80211_FRAGMENT_MAX ]; +unsigned int next; +}; +/** * struct sta_info - STA information *
@@ -454,6 +482,7 @@ struct ieee80211_sta_rx_stats {* @pcpu_rx_stats: per-CPU RX statistics, assigned only if the driver needs * this (by advertising the USES_RSS hw flag) * @status_stats: TX status statistics +* @frags: fragment cache */ struct sta_info {/* General information, mostly static */
@@ -551,6 +580,8 @@ struct sta_info {struct cfg80211_chan_def tdls_chandef; +struct ieee80211_fragment_cache frags; +/* keep last! */ struct ieee80211_sta sta; };
net/mac80211/wpa.c +8 -4
@@ -162,8 +162,8 @@ ieee80211_rx_h_michael_mic_verify(struct ieee80211_rx_data *rx) update_iv:/* update IV in key information to be able to detect replays */ - rx->key->u.tkip.rx[rx->security_idx].iv32 = rx->tkip_iv32; - rx->key->u.tkip.rx[rx->security_idx].iv16 = rx->tkip_iv16; + rx->key->u.tkip.rx[rx->security_idx].iv32 = rx->tkip.iv32; + rx->key->u.tkip.rx[rx->security_idx].iv16 = rx->tkip.iv16;return RX_CONTINUE ;
@@ -289,8 +289,8 @@ ieee80211_crypto_tkip_decrypt(struct ieee80211_rx_data *rx) key, skb->data + hdrlen, skb->len - hdrlen, rx->sta->sta.addr, hdr->addr1, hwaccel, rx->security_idx, - &rx->tkip_iv32, - &rx->tkip_iv16); + &rx->tkip.iv32, + &rx->tkip.iv16);if (res !=TKIP_DECRYPT_OK )return RX_DROP_UNUSABLE ;
@@ -548,6 +548,8 @@ ieee80211_crypto_ccmp_decrypt(struct ieee80211_rx_data *rx, }memcpy (key->u.ccmp.rx_pn[queue], pn,IEEE80211_CCMP_PN_LEN ); +if (unlikely (ieee80211_is_frag (hdr))) +memcpy (rx->ccm_gcm.pn, pn,IEEE80211_CCMP_PN_LEN ); }/* Remove CCMP header and MIC */
@@ -777,6 +779,8 @@ ieee80211_crypto_gcmp_decrypt(struct ieee80211_rx_data *rx) }memcpy (key->u.gcmp.rx_pn[queue], pn,IEEE80211_GCMP_PN_LEN ); +if (unlikely (ieee80211_is_frag (hdr))) +memcpy (rx->ccm_gcm.pn, pn,IEEE80211_CCMP_PN_LEN ); }/* Remove GCMP header and MIC */
net/netfilter/x_tables.c +3 -0
@@ -1173,6 +1173,9 @@ xt_replace_table(struct xt_table *table,smp_wmb (); table->private = newinfo; +/* make sure all cpus see new ->private value */ +smp_mb (); +/* * Even though table entries have now been swapped, other CPU's * may still be using the old entries. This is okay, because
net/nfc/nci/core.c +1 -0
@@ -1188,6 +1188,7 @@ EXPORT_SYMBOL(nci_allocate_device);void nci_free_device (struct nci_dev *ndev) {nfc_free_device (ndev->nfc_dev); +nci_hci_deallocate (ndev);kfree (ndev); }EXPORT_SYMBOL (nci_free_device);
net/nfc/nci/hci.c +5 -0
@@ -798,3 +798,8 @@ struct nci_hci_dev *nci_hci_allocate(struct nci_dev *ndev)return hdev; } + +void nci_hci_deallocate (struct nci_dev *ndev) +{ +kfree (ndev->hci_dev); +}
net/sched/sch_dsmark.c +2 -1
@@ -388,7 +388,8 @@ static void dsmark_reset(struct Qdisc *sch)struct dsmark_qdisc_data *p =qdisc_priv (sch);pr_debug ("%s(sch %p,[qdisc %p])\n" , __func__, sch, p); -qdisc_reset (p->q); +if (p->q) +qdisc_reset (p->q); sch->qstats.backlog =0 ; sch->q.qlen =0 ; }
net/tipc/msg.c +2 -7
@@ -141,18 +141,13 @@ int tipc_buf_append(struct sk_buff **headbuf, struct sk_buff **buf)if (unlikely (head)) goto err; *buf =NULL ; +if (skb_has_frag_list (frag) &&__skb_linearize (frag)) + goto err; frag =skb_unshare (frag,GFP_ATOMIC );if (unlikely (!frag)) goto err; head = *headbuf = frag;TIPC_SKB_CB (head)->tail =NULL ; -if (skb_is_nonlinear (head)) { - skb_walk_frags(head, tail) { -TIPC_SKB_CB (head)->tail = tail; - } - }else { -skb_frag_list_init (head); - }return 0 ; }
net/tipc/socket.c +4 -1
@@ -741,7 +741,10 @@ void tipc_sk_mcast_rcv(struct net *net, struct sk_buff_head *arrvq,spin_lock_bh (&inputq->lock);if (skb_peek (arrvq) == skb) {skb_queue_splice_tail_init (&tmpq, inputq); -__skb_dequeue (arrvq); +/* Decrease the skb's refcnt as increasing in the +* function tipc_skb_peek +*/ +kfree_skb (__skb_dequeue (arrvq)); }spin_unlock_bh (&inputq->lock);__skb_queue_purge (&tmpq);
net/wireless/util.c +6 -2
@@ -421,7 +421,8 @@ unsigned int ieee80211_get_mesh_hdrlen(struct ieee80211s_hdr *meshhdr)EXPORT_SYMBOL (ieee80211_get_mesh_hdrlen);int ieee80211_data_to_8023_exthdr (struct sk_buff *skb,struct ethhdr *ehdr, -const u8 *addr,enum nl80211_iftype iftype) +const u8 *addr,enum nl80211_iftype iftype, +bool is_amsdu) {struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;struct {
@@ -509,7 +510,7 @@ int ieee80211_data_to_8023_exthdr(struct sk_buff *skb, struct ethhdr *ehdr,skb_copy_bits (skb, hdrlen, &payload,sizeof (payload)); tmp.h_proto = payload.proto; -if (likely ((ether_addr_equal (payload.hdr, rfc1042_header) && +if (likely ((!is_amsdu &ðer_addr_equal (payload.hdr, rfc1042_header) && tmp.h_proto !=htons (ETH_P_AARP ) && tmp.h_proto !=htons (ETH_P_IPX )) ||ether_addr_equal (payload.hdr, bridge_tunnel_header)))
@@ -768,6 +769,9 @@ void ieee80211_amsdu_to_8023s(struct sk_buff *skb, struct sk_buff_head *list, remaining = skb->len - offset;if (subframe_len > remaining) goto purge; +/* mitigate A-MSDU aggregation injection attacks */ +if (ether_addr_equal (eth.h_dest, rfc1042_header)) + goto purge; offset +=sizeof (struct ethhdr ); last = remaining <= subframe_len + padding;
scripts/analyze_suspend.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # # Tool for analyzing suspend/resume timing # Copyright (c) 2013, Intel Corporation.
scripts/bloat-o-meter +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 # # Copyright 2004 Matt Mackall <[email protected]> #
scripts/bootgraph.pl +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # Copyright 2008, Intel Corporation #
scripts/checkincludes.pl +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # # checkincludes: find/remove files included more than once #
scripts/checkstack.pl +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # Check the stack usage of functions #
scripts/config +1 -1
@@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Manipulate options in a .config file from the command line myname=${0##*/}
scripts/diffconfig +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 # # diffconfig - a tool to compare .config files. #
scripts/dtc/dt_to_config +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # Copyright 2016 by Frank Rowand # Copyright 2016 by Gaurav Minocha
scripts/extract_xc3028.pl +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # Copyright (c) Mauro Carvalho Chehab <[email protected]> # Released under GPLv2
scripts/get_dvb_firmware +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # DVB firmware extractor # # (c) 2004 Andrew de Quincey
scripts/markup_oops.pl +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl use File::Basename; use Math::BigInt;
scripts/profile2linkerlist.pl +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # # Takes a (sorted) output of readprofile and turns it into a list suitable for
scripts/show_delta +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # # show_deltas: Read list of printk messages instrumented with # time data, and format with time deltas.
scripts/stackdelta +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # Read two files produced by the stackusage script, and show the # delta between them.
scripts/tracing/draw_functrace.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python """ Copyright 2008 (c) Frederic Weisbecker <[email protected]>
sound/soc/codecs/cs35l33.c +1 -0
@@ -1209,6 +1209,7 @@ static int cs35l33_i2c_probe(struct i2c_client *i2c_client,dev_err (&i2c_client->dev,"CS35L33 Device ID (%X). Expected ID %X\n" , devid,CS35L33_CHIP_ID ); + ret = -EINVAL ; goto err_enable; }
tools/kvm/kvm_stat/kvm_stat +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # # top-like utility for displaying kvm statistics #
tools/perf/pmu-events/jevents.c +1 -1
@@ -603,7 +603,7 @@ static int get_maxfds(void)struct rlimit rlim;if (getrlimit (RLIMIT_NOFILE , &rlim) ==0 ) -return min ((int )rlim.rlim_max /2 ,512 ); +return min (rlim.rlim_max /2 , (rlim_t )512 );return 512 ; }
tools/perf/python/tracepoint.py +1 -1
@@ -1,4 +1,4 @@ -#! /usr/bin/python +#! /usr/bin/env python # -*- python -*- # -*- coding: utf-8 -*-
tools/perf/python/twatch.py +1 -1
@@ -1,4 +1,4 @@ -#! /usr/bin/python +#! /usr/bin/env python # -*- python -*- # -*- coding: utf-8 -*- # twatch - Experimental use of the perf python interface
tools/perf/scripts/python/sched-migration.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # # Cpu task migration overview toy #
tools/perf/util/setup.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python2 +#!/usr/bin/env python2 from distutils.core import setup, Extension from os import getenv
tools/testing/ktest/compare-ktest-sample.pl +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl open (IN,"ktest.pl"); while (<IN>) {
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.9.271 kernel.
All users of the 4.9 kernel series must upgrade.
The updated 4.9.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.9.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
------------
Documentation/sphinx/parse-headers.pl | 2 Documentation/target/tcm_mod_builder.py | 2 Documentation/trace/postprocess/decode_msr.py | 2 Documentation/trace/postprocess/trace-pagealloc-postprocess.pl | 2 Documentation/trace/postprocess/trace-vmscan-postprocess.pl | 2 Makefile | 2 arch/ia64/scripts/unwcheck.py | 2 arch/mips/alchemy/board-xxs1500.c | 1 arch/mips/ralink/of.c | 2 arch/openrisc/include/asm/barrier.h | 9 drivers/char/hpet.c | 4 drivers/dma/qcom/hidma_mgmt.c | 14 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 1 drivers/i2c/busses/i2c-i801.c | 6 drivers/i2c/busses/i2c-s3c2410.c | 3 drivers/iio/adc/ad7793.c | 1 drivers/isdn/hardware/mISDN/mISDNinfineon.c | 24 + drivers/md/dm-snap.c | 2 drivers/media/dvb-frontends/sp8870.c | 4 drivers/media/usb/gspca/m5602/m5602_po1030.c | 10 drivers/misc/kgdbts.c | 3 drivers/misc/lis3lv02d/lis3lv02d.h | 1 drivers/misc/mei/interrupt.c | 3 drivers/net/caif/caif_serial.c | 1 drivers/net/ethernet/broadcom/bnx2.c | 2 drivers/net/ethernet/fujitsu/fmvj18x_cs.c | 5 drivers/net/ethernet/mellanox/mlx4/en_ethtool.c | 4 drivers/net/ethernet/mellanox/mlx4/port.c | 107 ++++++- drivers/net/ethernet/ti/netcp_core.c | 2 drivers/net/phy/mdio-octeon.c | 2 drivers/net/phy/mdio-thunder.c | 1 drivers/net/usb/hso.c | 4 drivers/net/usb/smsc75xx.c | 8 drivers/net/wireless/ath/ath10k/htt_rx.c | 61 +++- drivers/net/wireless/marvell/libertas/mesh.c | 28 - drivers/platform/x86/hp_accel.c | 22 + drivers/platform/x86/intel_punit_ipc.c | 1 drivers/scsi/BusLogic.c | 6 drivers/scsi/BusLogic.h | 2 drivers/scsi/libsas/sas_port.c | 4 drivers/spi/spi.c | 9 drivers/staging/emxx_udc/emxx_udc.c | 4 drivers/staging/iio/cdc/ad7746.c | 1 drivers/tty/serial/max310x.c | 6 drivers/tty/serial/rp2.c | 52 +-- drivers/usb/core/hub.h | 6 drivers/usb/misc/trancevibrator.c | 4 drivers/usb/misc/uss720.c | 1 drivers/usb/serial/ftdi_sio.c | 3 drivers/usb/serial/ftdi_sio_ids.h | 7 drivers/usb/serial/option.c | 4 drivers/usb/serial/pl2303.c | 1 drivers/usb/serial/pl2303.h | 1 drivers/usb/serial/ti_usb_3410_5052.c | 3 fs/btrfs/tree-log.c | 2 fs/hugetlbfs/inode.c | 4 fs/nfs/filelayout/filelayout.c | 2 fs/nfs/nfs4file.c | 2 fs/nfs/pagelist.c | 12 fs/nfs/pnfs.c | 17 - fs/proc/base.c | 4 include/linux/hugetlb.h | 2 include/linux/netfilter/x_tables.h | 2 include/linux/spi/spi.h | 3 include/net/cfg80211.h | 5 include/net/nfc/nci_core.h | 1 mm/hugetlb.c | 8 mm/vmstat.c | 3 net/bluetooth/cmtp/core.c | 5 net/ipv6/mcast.c | 3 net/mac80211/ieee80211_i.h | 36 -- net/mac80211/iface.c | 9 net/mac80211/key.c | 7 net/mac80211/key.h | 2 net/mac80211/rx.c | 151 +++++++--- net/mac80211/sta_info.c | 4 net/mac80211/sta_info.h | 31 ++ net/mac80211/wpa.c | 12 net/netfilter/x_tables.c | 3 net/nfc/nci/core.c | 1 net/nfc/nci/hci.c | 5 net/sched/sch_dsmark.c | 3 net/tipc/msg.c | 9 net/tipc/socket.c | 5 net/wireless/util.c | 8 scripts/analyze_suspend.py | 2 scripts/bloat-o-meter | 2 scripts/bootgraph.pl | 2 scripts/checkincludes.pl | 2 scripts/checkstack.pl | 2 scripts/config | 2 scripts/diffconfig | 2 scripts/dtc/dt_to_config | 2 scripts/extract_xc3028.pl | 2 scripts/get_dvb_firmware | 2 scripts/markup_oops.pl | 2 scripts/profile2linkerlist.pl | 2 scripts/show_delta | 2 scripts/stackdelta | 2 scripts/tracing/draw_functrace.py | 2 sound/soc/codecs/cs35l33.c | 1 tools/kvm/kvm_stat/kvm_stat | 2 tools/perf/pmu-events/jevents.c | 2 tools/perf/python/tracepoint.py | 2 tools/perf/python/twatch.py | 2 tools/perf/scripts/python/sched-migration.py | 2 tools/perf/util/setup.py | 2 tools/testing/ktest/compare-ktest-sample.pl | 2 108 files changed, 609 insertions(+), 261 deletions(-)
Alaa Emad (1):
media: dvb: Add check on sp8870_readreg return
Alexander Usyskin (1):
mei: request autosuspend after sending rx flow control
Andy Shevchenko (2):
scripts: switch explicitly to Python 3
platform/x86: intel_punit_ipc: Append MODULE_DEVICE_TABLE for ACPI
Anirudh Rayabharam (1):
net: fujitsu: fix potential null-ptr-deref
Anna Schumaker (1):
NFSv4: Fix a NULL pointer dereference in pnfs_mark_matching_lsegs_return()
Atul Gopinathan (1):
serial: max310x: unregister uart driver in case of failure and abort
Christophe JAILLET (3):
net: netcp: Fix an error message
net: mdio: thunder: Fix a double free issue in the .remove function
net: mdio: octeon: Fix some double free issues
Chunfeng Yun (1):
usb: core: reduce power-on-good delay time of root hub
Dan Carpenter (4):
NFS: fix an incorrect limit in filelayout_decode_layout()
staging: emxx_udc: fix loop in _nbu2ss_nuke()
ASoC: cs35l33: fix an error code in probe()
scsi: libsas: Use _safe() loop in sas_resume_port()
Daniele Palmas (1):
USB: serial: option: add Telit LE910-S1 compositions 0x7010, 0x7011
Dominik Andreas Schorpp (1):
USB: serial: ftdi_sio: add IDs for IDS GmbH Products
Dongliang Mu (2):
NFC: nci: fix memory leak in nci_allocate_device misc/uss720: fix memory leak in uss720_probe
Du Cheng (1):
net: caif: remove BUG_ON(dev == NULL) in caif_xmit
Felix Fietkau (1):
perf jevents: Fix getting maximum number of fds
Finn Behrens (1):
tweewide: Fix most Shebang lines
Greg Kroah-Hartman (4):
kgdb: fix gcc-11 warnings harder
libertas: register sysfs groups properly
media: gspca: properly check for errors in po1030_probe() Linux 4.9.271
Hoang Le (1):
Revert "net:tipc: Fix a double free in tipc_sk_mcast_rcv"
Jean Delvare (1):
i2c: i801: Don't generate an interrupt on bus reset
Johan Hovold (2):
net: hso: fix control-request directions
USB: trancevibrator: fix control-request direction
Johannes Berg (5):
mac80211: drop A-MSDUs on old ciphers
mac80211: add fragment cache to sta_info
mac80211: check defrag PN against current frame
mac80211: prevent attacks on TKIP/WEP as well
mac80211: do not accept/forward invalid EAPOL frames
Josef Bacik (1):
btrfs: do not BUG_ON in link_to_fixup_dir
Kai-Heng Feng (1):
platform/x86: hp_accel: Avoid invoking _INI to speed up resume
Kees Cook (1):
proc: Check /proc/$pid/attr/ writes against file opener
Krzysztof Kozlowski (1):
i2c: s3c2410: fix possible NULL pointer deref on read message after write
Lucas Stankus (1):
staging: iio: cdc: ad7746: avoid overwrite of num_channels
Mark Tomlinson (1):
netfilter: x_tables: Use correct memory barriers.
Mathy Vanhoef (4):
mac80211: assure all fragments are encrypted
mac80211: prevent mixed key and fragment cache attacks
mac80211: properly handle A-MSDUs that start with an RFC 1042 header
cfg80211: mitigate A-MSDU aggregation attacks
Matt Wang (1):
scsi: BusLogic: Fix 64-bit system enumeration error for Buslogic
Mike Kravetz (1):
hugetlbfs: hugetlb_fault_mutex_hash() cleanup
Mikulas Patocka (1):
dm snapshot: properly fix a crash when an origin has no snapshots
Pavel Skripkin (1):
net: usb: fix memory leak in smsc75xx_bind
Peter Zijlstra (1):
openrisc: Define memory barrier mb
Phillip Potter (2):
isdn: mISDNinfineon: check/cleanup ioremap failure correctly in setup_io
dmaengine: qcom_hidma: comment platform_driver_register call
Randy Dunlap (2):
MIPS: alchemy: xxs1500: add gpio-au1000.h header file
MIPS: ralink: export rt_sysc_membase for rt2880_wdt.c
Sean MacLennan (1):
USB: serial: ti_usb_3410_5052: add startech.com device id
Sriram R (1):
ath10k: Validate first subframe of A-MSDU before processing the list
Stephen Brennan (1):
mm, vmstat: drop zone->lock in /proc/pagetypeinfo
Taehee Yoo (2):
mld: fix panic in mld_newpack()
sch_dsmark: fix a NULL deref in qdisc_reset()
Thadeu Lima de Souza Cascardo (1):
Bluetooth: cmtp: fix file refcount when cmtp_attach_device fails
Tom Seewald (1):
char: hpet: add checks after calling ioremap
Trond Myklebust (1):
NFS: Don't corrupt the value of pg_bytes_written in nfs_do_recoalesce()
Vladyslav Tarasiuk (1):
net/mlx4: Fix EEPROM dump support
Wen Gong (1):
mac80211: extend protection against mixed key and fragment cache attacks
William A. Kennington III (1):
spi: Fix use-after-free with devm_spi_alloc_*
Xin Long (1):
tipc: skb_linearize the head skb when reassembling msgs
YueHaibing (1):
iio: adc: ad7793: Add missing error code in ad7793_setup()
Zhang Xiaoxu (1):
NFSv4: Fix v4.0/v4.1 SEEK_DATA return -ENOTSUPP when set NFS_V4_2 config
Zhen Lei (1):
net: bnx2: Fix error return code in bnx2_init_board()
Zheyu Ma (1):
serial: rp2: use 'request_firmware' instead of 'request_firmware_nowait'
Zolton Jheng (1):
USB: serial: pl2303: add device id for ADLINK ND-6530 GC
xinhui pan (1):
drm/amdgpu: Fix a use-after-free