]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.15-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 1 Feb 2018 12:31:14 +0000 (13:31 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 1 Feb 2018 12:31:14 +0000 (13:31 +0100)
added patches:
igb-free-irqs-when-device-is-hotplugged.patch
ima-policy-fix-parsing-of-fsuuid.patch
scsi-aacraid-fix-hang-in-kdump.patch
scsi-aacraid-fix-udev-inquiry-race-condition.patch
scsi-storvsc-missing-error-code-in-storvsc_probe.patch

queue-4.15/igb-free-irqs-when-device-is-hotplugged.patch [new file with mode: 0644]
queue-4.15/ima-policy-fix-parsing-of-fsuuid.patch [new file with mode: 0644]
queue-4.15/scsi-aacraid-fix-hang-in-kdump.patch [new file with mode: 0644]
queue-4.15/scsi-aacraid-fix-udev-inquiry-race-condition.patch [new file with mode: 0644]
queue-4.15/scsi-storvsc-missing-error-code-in-storvsc_probe.patch [new file with mode: 0644]
queue-4.15/series

diff --git a/queue-4.15/igb-free-irqs-when-device-is-hotplugged.patch b/queue-4.15/igb-free-irqs-when-device-is-hotplugged.patch
new file mode 100644 (file)
index 0000000..c93d718
--- /dev/null
@@ -0,0 +1,90 @@
+From 888f22931478a05bc81ceb7295c626e1292bf0ed Mon Sep 17 00:00:00 2001
+From: Lyude Paul <lyude@redhat.com>
+Date: Tue, 12 Dec 2017 14:31:30 -0500
+Subject: igb: Free IRQs when device is hotplugged
+
+From: Lyude Paul <lyude@redhat.com>
+
+commit 888f22931478a05bc81ceb7295c626e1292bf0ed upstream.
+
+Recently I got a Caldigit TS3 Thunderbolt 3 dock, and noticed that upon
+hotplugging my kernel would immediately crash due to igb:
+
+[  680.825801] kernel BUG at drivers/pci/msi.c:352!
+[  680.828388] invalid opcode: 0000 [#1] SMP
+[  680.829194] Modules linked in: igb(O) thunderbolt i2c_algo_bit joydev vfat fat btusb btrtl btbcm btintel bluetooth ecdh_generic hp_wmi sparse_keymap rfkill wmi_bmof iTCO_wdt intel_rapl x86_pkg_temp_thermal coretemp crc32_pclmul snd_pcm rtsx_pci_ms mei_me snd_timer memstick snd pcspkr mei soundcore i2c_i801 tpm_tis psmouse shpchp wmi tpm_tis_core tpm video hp_wireless acpi_pad rtsx_pci_sdmmc mmc_core crc32c_intel serio_raw rtsx_pci mfd_core xhci_pci xhci_hcd i2c_hid i2c_core [last unloaded: igb]
+[  680.831085] CPU: 1 PID: 78 Comm: kworker/u16:1 Tainted: G           O     4.15.0-rc3Lyude-Test+ #6
+[  680.831596] Hardware name: HP HP ZBook Studio G4/826B, BIOS P71 Ver. 01.03 06/09/2017
+[  680.832168] Workqueue: kacpi_hotplug acpi_hotplug_work_fn
+[  680.832687] RIP: 0010:free_msi_irqs+0x180/0x1b0
+[  680.833271] RSP: 0018:ffffc9000030fbf0 EFLAGS: 00010286
+[  680.833761] RAX: ffff8803405f9c00 RBX: ffff88033e3d2e40 RCX: 000000000000002c
+[  680.834278] RDX: 0000000000000000 RSI: 00000000000000ac RDI: ffff880340be2178
+[  680.834832] RBP: 0000000000000000 R08: ffff880340be1ff0 R09: ffff8803405f9c00
+[  680.835342] R10: 0000000000000000 R11: 0000000000000040 R12: ffff88033d63a298
+[  680.835822] R13: ffff88033d63a000 R14: 0000000000000060 R15: ffff880341959000
+[  680.836332] FS:  0000000000000000(0000) GS:ffff88034f440000(0000) knlGS:0000000000000000
+[  680.836817] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
+[  680.837360] CR2: 000055e64044afdf CR3: 0000000001c09002 CR4: 00000000003606e0
+[  680.837954] Call Trace:
+[  680.838853]  pci_disable_msix+0xce/0xf0
+[  680.839616]  igb_reset_interrupt_capability+0x5d/0x60 [igb]
+[  680.840278]  igb_remove+0x9d/0x110 [igb]
+[  680.840764]  pci_device_remove+0x36/0xb0
+[  680.841279]  device_release_driver_internal+0x157/0x220
+[  680.841739]  pci_stop_bus_device+0x7d/0xa0
+[  680.842255]  pci_stop_bus_device+0x2b/0xa0
+[  680.842722]  pci_stop_bus_device+0x3d/0xa0
+[  680.843189]  pci_stop_and_remove_bus_device+0xe/0x20
+[  680.843627]  trim_stale_devices+0xf3/0x140
+[  680.844086]  trim_stale_devices+0x94/0x140
+[  680.844532]  trim_stale_devices+0xa6/0x140
+[  680.845031]  ? get_slot_status+0x90/0xc0
+[  680.845536]  acpiphp_check_bridge.part.5+0xfe/0x140
+[  680.846021]  acpiphp_hotplug_notify+0x175/0x200
+[  680.846581]  ? free_bridge+0x100/0x100
+[  680.847113]  acpi_device_hotplug+0x8a/0x490
+[  680.847535]  acpi_hotplug_work_fn+0x1a/0x30
+[  680.848076]  process_one_work+0x182/0x3a0
+[  680.848543]  worker_thread+0x2e/0x380
+[  680.848963]  ? process_one_work+0x3a0/0x3a0
+[  680.849373]  kthread+0x111/0x130
+[  680.849776]  ? kthread_create_worker_on_cpu+0x50/0x50
+[  680.850188]  ret_from_fork+0x1f/0x30
+[  680.850601] Code: 43 14 85 c0 0f 84 d5 fe ff ff 31 ed eb 0f 83 c5 01 39 6b 14 0f 86 c5 fe ff ff 8b 7b 10 01 ef e8 b7 e4 d2 ff 48 83 78 70 00 74 e3 <0f> 0b 49 8d b5 a0 00 00 00 e8 62 6f d3 ff e9 c7 fe ff ff 48 8b
+[  680.851497] RIP: free_msi_irqs+0x180/0x1b0 RSP: ffffc9000030fbf0
+
+As it turns out, normally the freeing of IRQs that would fix this is called
+inside of the scope of __igb_close(). However, since the device is
+already gone by the point we try to unregister the netdevice from the
+driver due to a hotplug we end up seeing that the netif isn't present
+and thus, forget to free any of the device IRQs.
+
+So: make sure that if we're in the process of dismantling the netdev, we
+always allow __igb_close() to be called so that IRQs may be freed
+normally. Additionally, only allow igb_close() to be called from
+__igb_close() if it hasn't already been called for the given adapter.
+
+Signed-off-by: Lyude Paul <lyude@redhat.com>
+Fixes: 9474933caf21 ("igb: close/suspend race in netif_device_detach")
+Cc: Todd Fujinaka <todd.fujinaka@intel.com>
+Cc: Stephen Hemminger <stephen@networkplumber.org>
+Tested-by: Aaron Brown <aaron.f.brown@intel.com>
+Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/ethernet/intel/igb/igb_main.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/net/ethernet/intel/igb/igb_main.c
++++ b/drivers/net/ethernet/intel/igb/igb_main.c
+@@ -3676,7 +3676,7 @@ static int __igb_close(struct net_device
+ int igb_close(struct net_device *netdev)
+ {
+-      if (netif_device_present(netdev))
++      if (netif_device_present(netdev) || netdev->dismantle)
+               return __igb_close(netdev, false);
+       return 0;
+ }
diff --git a/queue-4.15/ima-policy-fix-parsing-of-fsuuid.patch b/queue-4.15/ima-policy-fix-parsing-of-fsuuid.patch
new file mode 100644 (file)
index 0000000..4541659
--- /dev/null
@@ -0,0 +1,34 @@
+From 36447456e1cca853188505f2a964dbbeacfc7a7a Mon Sep 17 00:00:00 2001
+From: Mike Rapoport <rppt@linux.vnet.ibm.com>
+Date: Wed, 17 Jan 2018 20:27:11 +0200
+Subject: ima/policy: fix parsing of fsuuid
+
+From: Mike Rapoport <rppt@linux.vnet.ibm.com>
+
+commit 36447456e1cca853188505f2a964dbbeacfc7a7a upstream.
+
+The switch to uuid_t invereted the logic of verfication that &entry->fsuuid
+is zero during parsing of "fsuuid=" rule. Instead of making sure the
+&entry->fsuuid field is not attempted to be overwritten, we bail out for
+perfectly correct rule.
+
+Fixes: 787d8c530af7 ("ima/policy: switch to use uuid_t")
+Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com>
+Signed-off-by: Mimi Zohar <zohar@linux.vnet.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ security/integrity/ima/ima_policy.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/security/integrity/ima/ima_policy.c
++++ b/security/integrity/ima/ima_policy.c
+@@ -743,7 +743,7 @@ static int ima_parse_rule(char *rule, st
+               case Opt_fsuuid:
+                       ima_log_string(ab, "fsuuid", args[0].from);
+-                      if (uuid_is_null(&entry->fsuuid)) {
++                      if (!uuid_is_null(&entry->fsuuid)) {
+                               result = -EINVAL;
+                               break;
+                       }
diff --git a/queue-4.15/scsi-aacraid-fix-hang-in-kdump.patch b/queue-4.15/scsi-aacraid-fix-hang-in-kdump.patch
new file mode 100644 (file)
index 0000000..ae31fbe
--- /dev/null
@@ -0,0 +1,60 @@
+From c5313ae8e4e037bfaf5e56cb8d6efdb8e92ce437 Mon Sep 17 00:00:00 2001
+From: Raghava Aditya Renukunta <RaghavaAditya.Renukunta@microsemi.com>
+Date: Tue, 26 Dec 2017 20:34:24 -0800
+Subject: scsi: aacraid: Fix hang in kdump
+
+From: Raghava Aditya Renukunta <RaghavaAditya.Renukunta@microsemi.com>
+
+commit c5313ae8e4e037bfaf5e56cb8d6efdb8e92ce437 upstream.
+
+Driver attempts to perform a device scan and device add after coming out
+of reset. At times when the kdump kernel loads and it tries to perform
+eh recovery, the device scan hangs since its commands are blocked because
+of the eh recovery. This should have shown up in normal eh recovery path
+(Should have been obvious)
+
+Remove the code that performs scanning.I can live without the rescanning
+support in the stable kernels but a hanging kdump/eh recovery needs to be
+fixed.
+
+Fixes: a2d0321dd532901e (scsi: aacraid: Reload offlined drives after controller reset)
+Reported-by: Douglas Miller <dougmill@linux.vnet.ibm.com>
+Tested-by: Guilherme G. Piccoli <gpiccoli@linux.vnet.ibm.com>
+Fixes: a2d0321dd532901e (scsi: aacraid: Reload offlined drives after controller reset)
+Signed-off-by: Raghava Aditya Renukunta <RaghavaAditya.Renukunta@microsemi.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/scsi/aacraid/aachba.c  |    1 -
+ drivers/scsi/aacraid/commsup.c |    9 +--------
+ 2 files changed, 1 insertion(+), 9 deletions(-)
+
+--- a/drivers/scsi/aacraid/aachba.c
++++ b/drivers/scsi/aacraid/aachba.c
+@@ -918,7 +918,6 @@ static void setinqstr(struct aac_dev *de
+               char *cname = kmemdup(sup_adap_info->adapter_type_text,
+                               sizeof(sup_adap_info->adapter_type_text),
+                                                               GFP_ATOMIC);
+-
+               if (!cname)
+                       return;
+--- a/drivers/scsi/aacraid/commsup.c
++++ b/drivers/scsi/aacraid/commsup.c
+@@ -1643,14 +1643,7 @@ static int _aac_reset_adapter(struct aac
+ out:
+       aac->in_reset = 0;
+       scsi_unblock_requests(host);
+-      /*
+-       * Issue bus rescan to catch any configuration that might have
+-       * occurred
+-       */
+-      if (!retval) {
+-              dev_info(&aac->pdev->dev, "Issuing bus rescan\n");
+-              scsi_scan_host(host);
+-      }
++
+       if (jafo) {
+               spin_lock_irq(host->host_lock);
+       }
diff --git a/queue-4.15/scsi-aacraid-fix-udev-inquiry-race-condition.patch b/queue-4.15/scsi-aacraid-fix-udev-inquiry-race-condition.patch
new file mode 100644 (file)
index 0000000..9d27e52
--- /dev/null
@@ -0,0 +1,63 @@
+From f4e8708d3104437fd7716e957f38c265b0c509ef Mon Sep 17 00:00:00 2001
+From: Raghava Aditya Renukunta <RaghavaAditya.Renukunta@microsemi.com>
+Date: Tue, 26 Dec 2017 20:34:22 -0800
+Subject: scsi: aacraid: Fix udev inquiry race condition
+
+From: Raghava Aditya Renukunta <RaghavaAditya.Renukunta@microsemi.com>
+
+commit f4e8708d3104437fd7716e957f38c265b0c509ef upstream.
+
+When udev requests for a devices inquiry string, it might create multiple
+threads causing a race condition on the shared inquiry resource string.
+
+Created a buffer with the string for each thread.
+
+Fixes: 3bc8070fb75b3315 ([SCSI] aacraid: SMC vendor identification)
+Signed-off-by: Raghava Aditya Renukunta <RaghavaAditya.Renukunta@microsemi.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/scsi/aacraid/aachba.c |   16 ++++++++++++----
+ 1 file changed, 12 insertions(+), 4 deletions(-)
+
+--- a/drivers/scsi/aacraid/aachba.c
++++ b/drivers/scsi/aacraid/aachba.c
+@@ -913,8 +913,16 @@ static void setinqstr(struct aac_dev *de
+       memset(str, ' ', sizeof(*str));
+       if (sup_adap_info->adapter_type_text[0]) {
+-              char *cp = sup_adap_info->adapter_type_text;
+               int c;
++              char *cp;
++              char *cname = kmemdup(sup_adap_info->adapter_type_text,
++                              sizeof(sup_adap_info->adapter_type_text),
++                                                              GFP_ATOMIC);
++
++              if (!cname)
++                      return;
++
++              cp = cname;
+               if ((cp[0] == 'A') && (cp[1] == 'O') && (cp[2] == 'C'))
+                       inqstrcpy("SMC", str->vid);
+               else {
+@@ -923,7 +931,7 @@ static void setinqstr(struct aac_dev *de
+                               ++cp;
+                       c = *cp;
+                       *cp = '\0';
+-                      inqstrcpy(sup_adap_info->adapter_type_text, str->vid);
++                      inqstrcpy(cname, str->vid);
+                       *cp = c;
+                       while (*cp && *cp != ' ')
+                               ++cp;
+@@ -937,8 +945,8 @@ static void setinqstr(struct aac_dev *de
+                       cp[sizeof(str->pid)] = '\0';
+               }
+               inqstrcpy (cp, str->pid);
+-              if (c)
+-                      cp[sizeof(str->pid)] = c;
++
++              kfree(cname);
+       } else {
+               struct aac_driver_ident *mp = aac_get_driver_ident(dev->cardtype);
diff --git a/queue-4.15/scsi-storvsc-missing-error-code-in-storvsc_probe.patch b/queue-4.15/scsi-storvsc-missing-error-code-in-storvsc_probe.patch
new file mode 100644 (file)
index 0000000..c411070
--- /dev/null
@@ -0,0 +1,36 @@
+From ca8dc694045e9aa248e9916e0f614deb0494cb3d Mon Sep 17 00:00:00 2001
+From: Dan Carpenter <dan.carpenter@oracle.com>
+Date: Tue, 16 Jan 2018 13:40:22 +0300
+Subject: scsi: storvsc: missing error code in storvsc_probe()
+
+From: Dan Carpenter <dan.carpenter@oracle.com>
+
+commit ca8dc694045e9aa248e9916e0f614deb0494cb3d upstream.
+
+We should set the error code if fc_remote_port_add() fails.
+
+Fixes: daf0cd445a21 ("scsi: storvsc: Add support for FC rport.")
+Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
+Reviewed-by: Cathy Avery <cavery@redhat.com>
+Acked-by: K. Y. Srinivasan <kys@microsoft.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/scsi/storvsc_drv.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/drivers/scsi/storvsc_drv.c
++++ b/drivers/scsi/storvsc_drv.c
+@@ -1834,8 +1834,10 @@ static int storvsc_probe(struct hv_devic
+               fc_host_node_name(host) = stor_device->node_name;
+               fc_host_port_name(host) = stor_device->port_name;
+               stor_device->rport = fc_remote_port_add(host, 0, &ids);
+-              if (!stor_device->rport)
++              if (!stor_device->rport) {
++                      ret = -ENOMEM;
+                       goto err_out4;
++              }
+       }
+ #endif
+       return 0;
index ee071dcd7b1ac7fad014fbb7080a40160f4b9eee..2b7c5135994c4afd6ec84c74b116df29de8627fd 100644 (file)
@@ -19,3 +19,8 @@ power-reset-zx-reboot-add-missing-module_description-author-license.patch
 gpio-iop-add-missing-module_description-author-license.patch
 gpio-ath79-add-missing-module_description-license.patch
 mtd-nand-denali_pci-add-missing-module_description-author-license.patch
+igb-free-irqs-when-device-is-hotplugged.patch
+ima-policy-fix-parsing-of-fsuuid.patch
+scsi-aacraid-fix-udev-inquiry-race-condition.patch
+scsi-aacraid-fix-hang-in-kdump.patch
+scsi-storvsc-missing-error-code-in-storvsc_probe.patch