commit:     8a47163889c90544a970b7e2c947fc5bef899c91
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Wed Dec 29 13:11:54 2021 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Wed Dec 29 13:11:54 2021 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=8a471638

Linux patch 4.14.260

Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>

 0000_README               |   4 +
 1259_linux-4.14.260.patch | 687 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 691 insertions(+)

diff --git a/0000_README b/0000_README
index db2d1b6c..a35bbc39 100644
--- a/0000_README
+++ b/0000_README
@@ -1083,6 +1083,10 @@ Patch:  1258_linux-4.14.259.patch
 From:   https://www.kernel.org
 Desc:   Linux 4.14.259
 
+Patch:  1259_linux-4.14.260.patch
+From:   https://www.kernel.org
+Desc:   Linux 4.14.260
+
 Patch:  1500_XATTR_USER_PREFIX.patch
 From:   https://bugs.gentoo.org/show_bug.cgi?id=470644
 Desc:   Support for namespace user.pax.* on tmpfs.

diff --git a/1259_linux-4.14.260.patch b/1259_linux-4.14.260.patch
new file mode 100644
index 00000000..fdec1014
--- /dev/null
+++ b/1259_linux-4.14.260.patch
@@ -0,0 +1,687 @@
+diff --git a/Documentation/admin-guide/kernel-parameters.txt 
b/Documentation/admin-guide/kernel-parameters.txt
+index 6de214080bbfa..d840466c8b216 100644
+--- a/Documentation/admin-guide/kernel-parameters.txt
++++ b/Documentation/admin-guide/kernel-parameters.txt
+@@ -1905,8 +1905,12 @@
+                       Default is 1 (enabled)
+ 
+       kvm-intel.emulate_invalid_guest_state=
+-                      [KVM,Intel] Enable emulation of invalid guest states
+-                      Default is 0 (disabled)
++                      [KVM,Intel] Disable emulation of invalid guest state.
++                      Ignored if kvm-intel.enable_unrestricted_guest=1, as
++                      guest state is never invalid for unrestricted guests.
++                      This param doesn't apply to nested guests (L2), as KVM
++                      never emulates invalid L2 guest state.
++                      Default is 1 (enabled)
+ 
+       kvm-intel.flexpriority=
+                       [KVM,Intel] Disable FlexPriority feature (TPR shadow).
+diff --git a/Documentation/networking/bonding.txt 
b/Documentation/networking/bonding.txt
+index 9ba04c0bab8db..f5d78c8005341 100644
+--- a/Documentation/networking/bonding.txt
++++ b/Documentation/networking/bonding.txt
+@@ -191,11 +191,12 @@ ad_actor_sys_prio
+ ad_actor_system
+ 
+       In an AD system, this specifies the mac-address for the actor in
+-      protocol packet exchanges (LACPDUs). The value cannot be NULL or
+-      multicast. It is preferred to have the local-admin bit set for this
+-      mac but driver does not enforce it. If the value is not given then
+-      system defaults to using the masters' mac address as actors' system
+-      address.
++      protocol packet exchanges (LACPDUs). The value cannot be a multicast
++      address. If the all-zeroes MAC is specified, bonding will internally
++      use the MAC of the bond itself. It is preferred to have the
++      local-admin bit set for this mac but driver does not enforce it. If
++      the value is not given then system defaults to using the masters'
++      mac address as actors' system address.
+ 
+       This parameter has effect only in 802.3ad mode and is available through
+       SysFs interface.
+diff --git a/Makefile b/Makefile
+index 1d22e50da86e8..8a87f5c06a830 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,7 +1,7 @@
+ # SPDX-License-Identifier: GPL-2.0
+ VERSION = 4
+ PATCHLEVEL = 14
+-SUBLEVEL = 259
++SUBLEVEL = 260
+ EXTRAVERSION =
+ NAME = Petit Gorille
+ 
+diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
+index f3de76f7ad439..2d8323648256c 100644
+--- a/arch/arm/kernel/entry-armv.S
++++ b/arch/arm/kernel/entry-armv.S
+@@ -624,11 +624,9 @@ call_fpe:
+       tstne   r0, #0x04000000                 @ bit 26 set on both ARM and 
Thumb-2
+       reteq   lr
+       and     r8, r0, #0x00000f00             @ mask out CP number
+- THUMB(       lsr     r8, r8, #8              )
+       mov     r7, #1
+-      add     r6, r10, #TI_USED_CP
+- ARM( strb    r7, [r6, r8, lsr #8]    )       @ set appropriate used_cp[]
+- THUMB(       strb    r7, [r6, r8]            )       @ set appropriate 
used_cp[]
++      add     r6, r10, r8, lsr #8             @ add used_cp[] array offset 
first
++      strb    r7, [r6, #TI_USED_CP]           @ set appropriate used_cp[]
+ #ifdef CONFIG_IWMMXT
+       @ Test if we need to give access to iWMMXt coprocessors
+       ldr     r5, [r10, #TI_FLAGS]
+@@ -637,7 +635,7 @@ call_fpe:
+       bcs     iwmmxt_task_enable
+ #endif
+  ARM( add     pc, pc, r8, lsr #6      )
+- THUMB(       lsl     r8, r8, #2              )
++ THUMB(       lsr     r8, r8, #6              )
+  THUMB(       add     pc, r8                  )
+       nop
+ 
+diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h
+index 2f7a4018b6e48..2711b63945ae2 100644
+--- a/arch/x86/include/asm/pgtable.h
++++ b/arch/x86/include/asm/pgtable.h
+@@ -1220,8 +1220,8 @@ static inline pmd_t pmd_swp_clear_soft_dirty(pmd_t pmd)
+ #endif
+ #endif
+ 
+-#define PKRU_AD_BIT 0x1
+-#define PKRU_WD_BIT 0x2
++#define PKRU_AD_BIT 0x1u
++#define PKRU_WD_BIT 0x2u
+ #define PKRU_BITS_PER_PKEY 2
+ 
+ static inline bool __pkru_allows_read(u32 pkru, u16 pkey)
+diff --git a/drivers/hid/hid-holtek-mouse.c b/drivers/hid/hid-holtek-mouse.c
+index 27c08ddab0e1a..96db7e96fcea9 100644
+--- a/drivers/hid/hid-holtek-mouse.c
++++ b/drivers/hid/hid-holtek-mouse.c
+@@ -68,8 +68,23 @@ static __u8 *holtek_mouse_report_fixup(struct hid_device 
*hdev, __u8 *rdesc,
+ static int holtek_mouse_probe(struct hid_device *hdev,
+                             const struct hid_device_id *id)
+ {
++      int ret;
++
+       if (!hid_is_usb(hdev))
+               return -EINVAL;
++
++      ret = hid_parse(hdev);
++      if (ret) {
++              hid_err(hdev, "hid parse failed: %d\n", ret);
++              return ret;
++      }
++
++      ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
++      if (ret) {
++              hid_err(hdev, "hw start failed: %d\n", ret);
++              return ret;
++      }
++
+       return 0;
+ }
+ 
+diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c
+index c187e557678ef..30a7f7fde6511 100644
+--- a/drivers/hwmon/lm90.c
++++ b/drivers/hwmon/lm90.c
+@@ -197,6 +197,7 @@ enum chips { lm90, adm1032, lm99, lm86, max6657, max6659, 
adt7461, max6680,
+ #define LM90_STATUS_RHIGH     (1 << 4) /* remote high temp limit tripped */
+ #define LM90_STATUS_LLOW      (1 << 5) /* local low temp limit tripped */
+ #define LM90_STATUS_LHIGH     (1 << 6) /* local high temp limit tripped */
++#define LM90_STATUS_BUSY      (1 << 7) /* conversion is ongoing */
+ 
+ #define MAX6696_STATUS2_R2THRM        (1 << 1) /* remote2 THERM limit tripped 
*/
+ #define MAX6696_STATUS2_R2OPEN        (1 << 2) /* remote2 is an open circuit 
*/
+@@ -786,7 +787,7 @@ static int lm90_update_device(struct device *dev)
+               val = lm90_read_reg(client, LM90_REG_R_STATUS);
+               if (val < 0)
+                       return val;
+-              data->alarms = val;     /* lower 8 bit of alarms */
++              data->alarms = val & ~LM90_STATUS_BUSY;
+ 
+               if (data->kind == max6696) {
+                       val = lm90_select_remote_channel(client, data, 1);
+@@ -1439,12 +1440,11 @@ static int lm90_detect(struct i2c_client *client,
+       if (man_id < 0 || chip_id < 0 || config1 < 0 || convrate < 0)
+               return -ENODEV;
+ 
+-      if (man_id == 0x01 || man_id == 0x5C || man_id == 0x41) {
++      if (man_id == 0x01 || man_id == 0x5C || man_id == 0xA1) {
+               config2 = i2c_smbus_read_byte_data(client, LM90_REG_R_CONFIG2);
+               if (config2 < 0)
+                       return -ENODEV;
+-      } else
+-              config2 = 0;            /* Make compiler happy */
++      }
+ 
+       if ((address == 0x4C || address == 0x4D)
+        && man_id == 0x01) { /* National Semiconductor */
+diff --git a/drivers/infiniband/hw/qib/qib_user_sdma.c 
b/drivers/infiniband/hw/qib/qib_user_sdma.c
+index 42329bbe4055f..0b6379bf76696 100644
+--- a/drivers/infiniband/hw/qib/qib_user_sdma.c
++++ b/drivers/infiniband/hw/qib/qib_user_sdma.c
+@@ -946,7 +946,7 @@ static int qib_user_sdma_queue_pkts(const struct 
qib_devdata *dd,
+                                              &addrlimit) ||
+                           addrlimit > type_max(typeof(pkt->addrlimit))) {
+                               ret = -EINVAL;
+-                              goto free_pbc;
++                              goto free_pkt;
+                       }
+                       pkt->addrlimit = addrlimit;
+ 
+diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c 
b/drivers/input/touchscreen/atmel_mxt_ts.c
+index 138d1f3b12b2e..366990fa01b99 100644
+--- a/drivers/input/touchscreen/atmel_mxt_ts.c
++++ b/drivers/input/touchscreen/atmel_mxt_ts.c
+@@ -1768,7 +1768,7 @@ static int mxt_read_info_block(struct mxt_data *data)
+       if (error) {
+               dev_err(&client->dev, "Error %d parsing object table\n", error);
+               mxt_free_object_table(data);
+-              goto err_free_mem;
++              return error;
+       }
+ 
+       data->object_table = (struct mxt_object *)(id_buf + MXT_OBJECT_START);
+diff --git a/drivers/net/bonding/bond_options.c 
b/drivers/net/bonding/bond_options.c
+index f24df859f0a7e..1e81b1cafae35 100644
+--- a/drivers/net/bonding/bond_options.c
++++ b/drivers/net/bonding/bond_options.c
+@@ -1443,7 +1443,7 @@ static int bond_option_ad_actor_system_set(struct 
bonding *bond,
+               mac = (u8 *)&newval->value;
+       }
+ 
+-      if (!is_valid_ether_addr(mac))
++      if (is_multicast_ether_addr(mac))
+               goto err;
+ 
+       netdev_dbg(bond->dev, "Setting ad_actor_system to %pM\n", mac);
+diff --git a/drivers/net/can/usb/kvaser_usb.c 
b/drivers/net/can/usb/kvaser_usb.c
+index 2b994bbf85ca3..9742e32d5cd54 100644
+--- a/drivers/net/can/usb/kvaser_usb.c
++++ b/drivers/net/can/usb/kvaser_usb.c
+@@ -31,7 +31,10 @@
+ #define USB_SEND_TIMEOUT              1000 /* msecs */
+ #define USB_RECV_TIMEOUT              1000 /* msecs */
+ #define RX_BUFFER_SIZE                        3072
+-#define CAN_USB_CLOCK                 8000000
++#define KVASER_USB_CAN_CLOCK_8MHZ     8000000
++#define KVASER_USB_CAN_CLOCK_16MHZ    16000000
++#define KVASER_USB_CAN_CLOCK_24MHZ    24000000
++#define KVASER_USB_CAN_CLOCK_32MHZ    32000000
+ #define MAX_NET_DEVICES                       3
+ #define MAX_USBCAN_NET_DEVICES                2
+ 
+@@ -142,6 +145,12 @@ static inline bool kvaser_is_usbcan(const struct 
usb_device_id *id)
+ #define CMD_LEAF_USB_THROTTLE         77
+ #define CMD_LEAF_LOG_MESSAGE          106
+ 
++/* Leaf frequency options */
++#define KVASER_USB_LEAF_SWOPTION_FREQ_MASK 0x60
++#define KVASER_USB_LEAF_SWOPTION_FREQ_16_MHZ_CLK 0
++#define KVASER_USB_LEAF_SWOPTION_FREQ_32_MHZ_CLK BIT(5)
++#define KVASER_USB_LEAF_SWOPTION_FREQ_24_MHZ_CLK BIT(6)
++
+ /* error factors */
+ #define M16C_EF_ACKE                  BIT(0)
+ #define M16C_EF_CRCE                  BIT(1)
+@@ -472,6 +481,8 @@ struct kvaser_usb {
+       bool rxinitdone;
+       void *rxbuf[MAX_RX_URBS];
+       dma_addr_t rxbuf_dma[MAX_RX_URBS];
++
++      struct can_clock clock;
+ };
+ 
+ struct kvaser_usb_net_priv {
+@@ -652,6 +663,27 @@ static int kvaser_usb_send_simple_msg(const struct 
kvaser_usb *dev,
+       return rc;
+ }
+ 
++static void kvaser_usb_get_software_info_leaf(struct kvaser_usb *dev,
++                                            const struct leaf_msg_softinfo 
*softinfo)
++{
++      u32 sw_options = le32_to_cpu(softinfo->sw_options);
++
++      dev->fw_version = le32_to_cpu(softinfo->fw_version);
++      dev->max_tx_urbs = le16_to_cpu(softinfo->max_outstanding_tx);
++
++      switch (sw_options & KVASER_USB_LEAF_SWOPTION_FREQ_MASK) {
++      case KVASER_USB_LEAF_SWOPTION_FREQ_16_MHZ_CLK:
++              dev->clock.freq = KVASER_USB_CAN_CLOCK_16MHZ;
++              break;
++      case KVASER_USB_LEAF_SWOPTION_FREQ_24_MHZ_CLK:
++              dev->clock.freq = KVASER_USB_CAN_CLOCK_24MHZ;
++              break;
++      case KVASER_USB_LEAF_SWOPTION_FREQ_32_MHZ_CLK:
++              dev->clock.freq = KVASER_USB_CAN_CLOCK_32MHZ;
++              break;
++      }
++}
++
+ static int kvaser_usb_get_software_info(struct kvaser_usb *dev)
+ {
+       struct kvaser_msg msg;
+@@ -667,14 +699,13 @@ static int kvaser_usb_get_software_info(struct 
kvaser_usb *dev)
+ 
+       switch (dev->family) {
+       case KVASER_LEAF:
+-              dev->fw_version = le32_to_cpu(msg.u.leaf.softinfo.fw_version);
+-              dev->max_tx_urbs =
+-                      le16_to_cpu(msg.u.leaf.softinfo.max_outstanding_tx);
++              kvaser_usb_get_software_info_leaf(dev, &msg.u.leaf.softinfo);
+               break;
+       case KVASER_USBCAN:
+               dev->fw_version = le32_to_cpu(msg.u.usbcan.softinfo.fw_version);
+               dev->max_tx_urbs =
+                       le16_to_cpu(msg.u.usbcan.softinfo.max_outstanding_tx);
++              dev->clock.freq = KVASER_USB_CAN_CLOCK_8MHZ;
+               break;
+       }
+ 
+@@ -1926,7 +1957,7 @@ static int kvaser_usb_init_one(struct usb_interface 
*intf,
+       kvaser_usb_reset_tx_urb_contexts(priv);
+ 
+       priv->can.state = CAN_STATE_STOPPED;
+-      priv->can.clock.freq = CAN_USB_CLOCK;
++      priv->can.clock.freq = dev->clock.freq;
+       priv->can.bittiming_const = &kvaser_usb_bittiming_const;
+       priv->can.do_set_bittiming = kvaser_usb_set_bittiming;
+       priv->can.do_set_mode = kvaser_usb_set_mode;
+diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov.h 
b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov.h
+index 5f327659efa7a..85b688f60b876 100644
+--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov.h
++++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov.h
+@@ -202,7 +202,7 @@ int qlcnic_sriov_get_vf_vport_info(struct qlcnic_adapter *,
+                                  struct qlcnic_info *, u16);
+ int qlcnic_sriov_cfg_vf_guest_vlan(struct qlcnic_adapter *, u16, u8);
+ void qlcnic_sriov_free_vlans(struct qlcnic_adapter *);
+-void qlcnic_sriov_alloc_vlans(struct qlcnic_adapter *);
++int qlcnic_sriov_alloc_vlans(struct qlcnic_adapter *);
+ bool qlcnic_sriov_check_any_vlan(struct qlcnic_vf_info *);
+ void qlcnic_sriov_del_vlan_id(struct qlcnic_sriov *,
+                             struct qlcnic_vf_info *, u16);
+diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c 
b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c
+index c58180f408448..44caa7c2077ec 100644
+--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c
++++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c
+@@ -433,7 +433,7 @@ static int qlcnic_sriov_set_guest_vlan_mode(struct 
qlcnic_adapter *adapter,
+                                           struct qlcnic_cmd_args *cmd)
+ {
+       struct qlcnic_sriov *sriov = adapter->ahw->sriov;
+-      int i, num_vlans;
++      int i, num_vlans, ret;
+       u16 *vlans;
+ 
+       if (sriov->allowed_vlans)
+@@ -444,7 +444,9 @@ static int qlcnic_sriov_set_guest_vlan_mode(struct 
qlcnic_adapter *adapter,
+       dev_info(&adapter->pdev->dev, "Number of allowed Guest VLANs = %d\n",
+                sriov->num_allowed_vlans);
+ 
+-      qlcnic_sriov_alloc_vlans(adapter);
++      ret = qlcnic_sriov_alloc_vlans(adapter);
++      if (ret)
++              return ret;
+ 
+       if (!sriov->any_vlan)
+               return 0;
+@@ -2164,7 +2166,7 @@ static int qlcnic_sriov_vf_resume(struct qlcnic_adapter 
*adapter)
+       return err;
+ }
+ 
+-void qlcnic_sriov_alloc_vlans(struct qlcnic_adapter *adapter)
++int qlcnic_sriov_alloc_vlans(struct qlcnic_adapter *adapter)
+ {
+       struct qlcnic_sriov *sriov = adapter->ahw->sriov;
+       struct qlcnic_vf_info *vf;
+@@ -2174,7 +2176,11 @@ void qlcnic_sriov_alloc_vlans(struct qlcnic_adapter 
*adapter)
+               vf = &sriov->vf_info[i];
+               vf->sriov_vlans = kcalloc(sriov->num_allowed_vlans,
+                                         sizeof(*vf->sriov_vlans), GFP_KERNEL);
++              if (!vf->sriov_vlans)
++                      return -ENOMEM;
+       }
++
++      return 0;
+ }
+ 
+ void qlcnic_sriov_free_vlans(struct qlcnic_adapter *adapter)
+diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c 
b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c
+index 50eaafa3eaba3..c9f2cd2462230 100644
+--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c
++++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c
+@@ -598,7 +598,9 @@ static int __qlcnic_pci_sriov_enable(struct qlcnic_adapter 
*adapter,
+       if (err)
+               goto del_flr_queue;
+ 
+-      qlcnic_sriov_alloc_vlans(adapter);
++      err = qlcnic_sriov_alloc_vlans(adapter);
++      if (err)
++              goto del_flr_queue;
+ 
+       return err;
+ 
+diff --git a/drivers/net/ethernet/sfc/falcon/rx.c 
b/drivers/net/ethernet/sfc/falcon/rx.c
+index 6a8406dc0c2b4..06f556d373949 100644
+--- a/drivers/net/ethernet/sfc/falcon/rx.c
++++ b/drivers/net/ethernet/sfc/falcon/rx.c
+@@ -732,7 +732,10 @@ static void ef4_init_rx_recycle_ring(struct ef4_nic *efx,
+                                           efx->rx_bufs_per_page);
+       rx_queue->page_ring = kcalloc(page_ring_size,
+                                     sizeof(*rx_queue->page_ring), GFP_KERNEL);
+-      rx_queue->page_ptr_mask = page_ring_size - 1;
++      if (!rx_queue->page_ring)
++              rx_queue->page_ptr_mask = 0;
++      else
++              rx_queue->page_ptr_mask = page_ring_size - 1;
+ }
+ 
+ void ef4_init_rx_queue(struct ef4_rx_queue *rx_queue)
+diff --git a/drivers/net/ethernet/smsc/smc911x.c 
b/drivers/net/ethernet/smsc/smc911x.c
+index f4f52a64f450a..56865ddd32502 100644
+--- a/drivers/net/ethernet/smsc/smc911x.c
++++ b/drivers/net/ethernet/smsc/smc911x.c
+@@ -2089,6 +2089,11 @@ static int smc911x_drv_probe(struct platform_device 
*pdev)
+ 
+       ndev->dma = (unsigned char)-1;
+       ndev->irq = platform_get_irq(pdev, 0);
++      if (ndev->irq < 0) {
++              ret = ndev->irq;
++              goto release_both;
++      }
++
+       lp = netdev_priv(ndev);
+       lp->netdev = ndev;
+ #ifdef SMC_DYNAMIC_BUS_CONFIG
+diff --git a/drivers/net/fjes/fjes_main.c b/drivers/net/fjes/fjes_main.c
+index 26d3051591dac..9e8add3d93adc 100644
+--- a/drivers/net/fjes/fjes_main.c
++++ b/drivers/net/fjes/fjes_main.c
+@@ -1284,6 +1284,11 @@ static int fjes_probe(struct platform_device *plat_dev)
+       hw->hw_res.start = res->start;
+       hw->hw_res.size = resource_size(res);
+       hw->hw_res.irq = platform_get_irq(plat_dev, 0);
++      if (hw->hw_res.irq < 0) {
++              err = hw->hw_res.irq;
++              goto err_free_control_wq;
++      }
++
+       err = fjes_hw_init(&adapter->hw);
+       if (err)
+               goto err_free_control_wq;
+diff --git a/drivers/net/hamradio/mkiss.c b/drivers/net/hamradio/mkiss.c
+index 2074fc55a88ad..cbd637a3257bb 100644
+--- a/drivers/net/hamradio/mkiss.c
++++ b/drivers/net/hamradio/mkiss.c
+@@ -803,13 +803,14 @@ static void mkiss_close(struct tty_struct *tty)
+        */
+       netif_stop_queue(ax->dev);
+ 
+-      /* Free all AX25 frame buffers. */
++      unregister_netdev(ax->dev);
++
++      /* Free all AX25 frame buffers after unreg. */
+       kfree(ax->rbuff);
+       kfree(ax->xbuff);
+ 
+       ax->tty = NULL;
+ 
+-      unregister_netdev(ax->dev);
+       free_netdev(ax->dev);
+ }
+ 
+diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
+index e286188b6ea1b..d6a71c051ec1b 100644
+--- a/drivers/net/usb/lan78xx.c
++++ b/drivers/net/usb/lan78xx.c
+@@ -74,6 +74,8 @@
+ #define LAN7801_USB_PRODUCT_ID                (0x7801)
+ #define LAN78XX_EEPROM_MAGIC          (0x78A5)
+ #define LAN78XX_OTP_MAGIC             (0x78F3)
++#define AT29M2AF_USB_VENDOR_ID                (0x07C9)
++#define AT29M2AF_USB_PRODUCT_ID       (0x0012)
+ 
+ #define       MII_READ                        1
+ #define       MII_WRITE                       0
+@@ -4013,6 +4015,10 @@ static const struct usb_device_id products[] = {
+       /* LAN7801 USB Gigabit Ethernet Device */
+       USB_DEVICE(LAN78XX_USB_VENDOR_ID, LAN7801_USB_PRODUCT_ID),
+       },
++      {
++      /* ATM2-AF USB Gigabit Ethernet Device */
++      USB_DEVICE(AT29M2AF_USB_VENDOR_ID, AT29M2AF_USB_PRODUCT_ID),
++      },
+       {},
+ };
+ MODULE_DEVICE_TABLE(usb, products);
+diff --git a/drivers/pinctrl/stm32/pinctrl-stm32.c 
b/drivers/pinctrl/stm32/pinctrl-stm32.c
+index b38e82a868df8..08d0fa00bed48 100644
+--- a/drivers/pinctrl/stm32/pinctrl-stm32.c
++++ b/drivers/pinctrl/stm32/pinctrl-stm32.c
+@@ -989,10 +989,10 @@ static int stm32_gpiolib_register_bank(struct 
stm32_pinctrl *pctl,
+               bank_nr = args.args[1] / STM32_GPIO_PINS_PER_BANK;
+               bank->gpio_chip.base = args.args[1];
+ 
+-              npins = args.args[2];
+-              while (!of_parse_phandle_with_fixed_args(np, "gpio-ranges", 3,
+-                                                       ++i, &args))
+-                      npins += args.args[2];
++              /* get the last defined gpio line (offset + nb of pins) */
++              npins = args.args[0] + args.args[2];
++              while (!of_parse_phandle_with_fixed_args(np, "gpio-ranges", 3, 
++i, &args))
++                      npins = max(npins, (int)(args.args[0] + args.args[2]));
+       } else {
+               bank_nr = pctl->nbanks;
+               bank->gpio_chip.base = bank_nr * STM32_GPIO_PINS_PER_BANK;
+diff --git a/drivers/spi/spi-armada-3700.c b/drivers/spi/spi-armada-3700.c
+index 4903f15177cfd..8fedf83585d41 100644
+--- a/drivers/spi/spi-armada-3700.c
++++ b/drivers/spi/spi-armada-3700.c
+@@ -852,7 +852,7 @@ static int a3700_spi_probe(struct platform_device *pdev)
+       return 0;
+ 
+ error_clk:
+-      clk_disable_unprepare(spi->clk);
++      clk_unprepare(spi->clk);
+ error:
+       spi_master_put(master);
+ out:
+diff --git a/drivers/usb/gadget/function/u_ether.c 
b/drivers/usb/gadget/function/u_ether.c
+index 38a35f57b22c0..f59c20457e658 100644
+--- a/drivers/usb/gadget/function/u_ether.c
++++ b/drivers/usb/gadget/function/u_ether.c
+@@ -864,19 +864,23 @@ int gether_register_netdev(struct net_device *net)
+ {
+       struct eth_dev *dev;
+       struct usb_gadget *g;
+-      struct sockaddr sa;
+       int status;
+ 
+       if (!net->dev.parent)
+               return -EINVAL;
+       dev = netdev_priv(net);
+       g = dev->gadget;
++
++      memcpy(net->dev_addr, dev->dev_mac, ETH_ALEN);
++      net->addr_assign_type = NET_ADDR_RANDOM;
++
+       status = register_netdev(net);
+       if (status < 0) {
+               dev_dbg(&g->dev, "register_netdev failed, %d\n", status);
+               return status;
+       } else {
+               INFO(dev, "HOST MAC %pM\n", dev->host_mac);
++              INFO(dev, "MAC %pM\n", dev->dev_mac);
+ 
+               /* two kinds of host-initiated state changes:
+                *  - iff DATA transfer is active, carrier is "on"
+@@ -884,15 +888,6 @@ int gether_register_netdev(struct net_device *net)
+                */
+               netif_carrier_off(net);
+       }
+-      sa.sa_family = net->type;
+-      memcpy(sa.sa_data, dev->dev_mac, ETH_ALEN);
+-      rtnl_lock();
+-      status = dev_set_mac_address(net, &sa);
+-      rtnl_unlock();
+-      if (status)
+-              pr_warn("cannot set self ethernet address: %d\n", status);
+-      else
+-              INFO(dev, "MAC %pM\n", dev->dev_mac);
+ 
+       return status;
+ }
+diff --git a/fs/f2fs/xattr.c b/fs/f2fs/xattr.c
+index 89c975126d4e8..b3c64ab0d5a56 100644
+--- a/fs/f2fs/xattr.c
++++ b/fs/f2fs/xattr.c
+@@ -636,8 +636,15 @@ static int __f2fs_setxattr(struct inode *inode, int index,
+       }
+ 
+       last = here;
+-      while (!IS_XATTR_LAST_ENTRY(last))
++      while (!IS_XATTR_LAST_ENTRY(last)) {
++              if ((void *)(last) + sizeof(__u32) > last_base_addr ||
++                      (void *)XATTR_NEXT_ENTRY(last) > last_base_addr) {
++                      set_sbi_flag(F2FS_I_SB(inode), SBI_NEED_FSCK);
++                      error = -EFSCORRUPTED;
++                      goto exit;
++              }
+               last = XATTR_NEXT_ENTRY(last);
++      }
+ 
+       newsize = XATTR_ALIGN(sizeof(struct f2fs_xattr_entry) + len + size);
+ 
+diff --git a/include/linux/virtio_net.h b/include/linux/virtio_net.h
+index 162761f72c142..db8ab0fac81a2 100644
+--- a/include/linux/virtio_net.h
++++ b/include/linux/virtio_net.h
+@@ -7,9 +7,27 @@
+ #include <uapi/linux/udp.h>
+ #include <uapi/linux/virtio_net.h>
+ 
++static inline bool virtio_net_hdr_match_proto(__be16 protocol, __u8 gso_type)
++{
++      switch (gso_type & ~VIRTIO_NET_HDR_GSO_ECN) {
++      case VIRTIO_NET_HDR_GSO_TCPV4:
++              return protocol == cpu_to_be16(ETH_P_IP);
++      case VIRTIO_NET_HDR_GSO_TCPV6:
++              return protocol == cpu_to_be16(ETH_P_IPV6);
++      case VIRTIO_NET_HDR_GSO_UDP:
++              return protocol == cpu_to_be16(ETH_P_IP) ||
++                     protocol == cpu_to_be16(ETH_P_IPV6);
++      default:
++              return false;
++      }
++}
++
+ static inline int virtio_net_hdr_set_proto(struct sk_buff *skb,
+                                          const struct virtio_net_hdr *hdr)
+ {
++      if (skb->protocol)
++              return 0;
++
+       switch (hdr->gso_type & ~VIRTIO_NET_HDR_GSO_ECN) {
+       case VIRTIO_NET_HDR_GSO_TCPV4:
+       case VIRTIO_NET_HDR_GSO_UDP:
+@@ -88,9 +106,12 @@ static inline int virtio_net_hdr_to_skb(struct sk_buff 
*skb,
+                       if (!skb->protocol) {
+                               __be16 protocol = 
dev_parse_header_protocol(skb);
+ 
+-                              virtio_net_hdr_set_proto(skb, hdr);
+-                              if (protocol && protocol != skb->protocol)
++                              if (!protocol)
++                                      virtio_net_hdr_set_proto(skb, hdr);
++                              else if (!virtio_net_hdr_match_proto(protocol, 
hdr->gso_type))
+                                       return -EINVAL;
++                              else
++                                      skb->protocol = protocol;
+                       }
+ retry:
+                       if (!skb_flow_dissect_flow_keys(skb, &keys, 0)) {
+diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c
+index 6915eebc7a4a9..0232afd9d9c3c 100644
+--- a/net/ax25/af_ax25.c
++++ b/net/ax25/af_ax25.c
+@@ -88,8 +88,10 @@ static void ax25_kill_by_device(struct net_device *dev)
+ again:
+       ax25_for_each(s, &ax25_list) {
+               if (s->ax25_dev == ax25_dev) {
+-                      s->ax25_dev = NULL;
+                       spin_unlock_bh(&ax25_list_lock);
++                      lock_sock(s->sk);
++                      s->ax25_dev = NULL;
++                      release_sock(s->sk);
+                       ax25_disconnect(s, ENETUNREACH);
+                       spin_lock_bh(&ax25_list_lock);
+ 
+diff --git a/net/netfilter/nfnetlink_log.c b/net/netfilter/nfnetlink_log.c
+index cad6498f10b03..0ccc7c851a788 100644
+--- a/net/netfilter/nfnetlink_log.c
++++ b/net/netfilter/nfnetlink_log.c
+@@ -510,7 +510,8 @@ __build_packet_message(struct nfnl_log_net *log,
+               goto nla_put_failure;
+ 
+       if (indev && skb->dev &&
+-          skb->mac_header != skb->network_header) {
++          skb_mac_header_was_set(skb) &&
++          skb_mac_header_len(skb) != 0) {
+               struct nfulnl_msg_packet_hw phw;
+               int len;
+ 
+diff --git a/net/netfilter/nfnetlink_queue.c b/net/netfilter/nfnetlink_queue.c
+index 13e67eb75d841..26f563bbb58de 100644
+--- a/net/netfilter/nfnetlink_queue.c
++++ b/net/netfilter/nfnetlink_queue.c
+@@ -543,7 +543,8 @@ nfqnl_build_packet_message(struct net *net, struct 
nfqnl_instance *queue,
+               goto nla_put_failure;
+ 
+       if (indev && entskb->dev &&
+-          skb_mac_header_was_set(entskb)) {
++          skb_mac_header_was_set(entskb) &&
++          skb_mac_header_len(entskb) != 0) {
+               struct nfqnl_msg_packet_hw phw;
+               int len;
+ 
+diff --git a/net/phonet/pep.c b/net/phonet/pep.c
+index bffcef58ebf5c..b0d958cd1823e 100644
+--- a/net/phonet/pep.c
++++ b/net/phonet/pep.c
+@@ -959,6 +959,8 @@ static int pep_ioctl(struct sock *sk, int cmd, unsigned 
long arg)
+                       ret =  -EBUSY;
+               else if (sk->sk_state == TCP_ESTABLISHED)
+                       ret = -EISCONN;
++              else if (!pn->pn_sk.sobject)
++                      ret = -EADDRNOTAVAIL;
+               else
+                       ret = pep_sock_enable(sk, NULL, 0);
+               release_sock(sk);
+diff --git a/sound/core/jack.c b/sound/core/jack.c
+index f652e90efd7e7..5ddf81f091fa9 100644
+--- a/sound/core/jack.c
++++ b/sound/core/jack.c
+@@ -234,6 +234,10 @@ int snd_jack_new(struct snd_card *card, const char *id, 
int type,
+               return -ENOMEM;
+ 
+       jack->id = kstrdup(id, GFP_KERNEL);
++      if (jack->id == NULL) {
++              kfree(jack);
++              return -ENOMEM;
++      }
+ 
+       /* don't creat input device for phantom jack */
+       if (!phantom_jack) {
+diff --git a/sound/drivers/opl3/opl3_midi.c b/sound/drivers/opl3/opl3_midi.c
+index 13c0a7e1bc2b0..5f934b2f14869 100644
+--- a/sound/drivers/opl3/opl3_midi.c
++++ b/sound/drivers/opl3/opl3_midi.c
+@@ -415,7 +415,7 @@ void snd_opl3_note_on(void *p, int note, int vel, struct 
snd_midi_channel *chan)
+       }
+       if (instr_4op) {
+               vp2 = &opl3->voices[voice + 3];
+-              if (vp->state > 0) {
++              if (vp2->state > 0) {
+                       opl3_reg = reg_side | (OPL3_REG_KEYON_BLOCK +
+                                              voice_offset + 3);
+                       reg_val = vp->keyon_reg & ~OPL3_KEYON_BIT;

Reply via email to