From: Greg Kroah-Hartman Date: Thu, 1 Feb 2018 12:31:14 +0000 (+0100) Subject: 4.15-stable patches X-Git-Tag: v4.4.115~14 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=72c28f3dd3bdd7c6d89e92a528146447f84c4b69;p=thirdparty%2Fkernel%2Fstable-queue.git 4.15-stable patches 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 --- 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 index 00000000000..c93d718c7b5 --- /dev/null +++ b/queue-4.15/igb-free-irqs-when-device-is-hotplugged.patch @@ -0,0 +1,90 @@ +From 888f22931478a05bc81ceb7295c626e1292bf0ed Mon Sep 17 00:00:00 2001 +From: Lyude Paul +Date: Tue, 12 Dec 2017 14:31:30 -0500 +Subject: igb: Free IRQs when device is hotplugged + +From: Lyude Paul + +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 +Fixes: 9474933caf21 ("igb: close/suspend race in netif_device_detach") +Cc: Todd Fujinaka +Cc: Stephen Hemminger +Tested-by: Aaron Brown +Signed-off-by: Jeff Kirsher +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..45416595659 --- /dev/null +++ b/queue-4.15/ima-policy-fix-parsing-of-fsuuid.patch @@ -0,0 +1,34 @@ +From 36447456e1cca853188505f2a964dbbeacfc7a7a Mon Sep 17 00:00:00 2001 +From: Mike Rapoport +Date: Wed, 17 Jan 2018 20:27:11 +0200 +Subject: ima/policy: fix parsing of fsuuid + +From: Mike Rapoport + +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 +Signed-off-by: Mimi Zohar +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..ae31fbeac7f --- /dev/null +++ b/queue-4.15/scsi-aacraid-fix-hang-in-kdump.patch @@ -0,0 +1,60 @@ +From c5313ae8e4e037bfaf5e56cb8d6efdb8e92ce437 Mon Sep 17 00:00:00 2001 +From: Raghava Aditya Renukunta +Date: Tue, 26 Dec 2017 20:34:24 -0800 +Subject: scsi: aacraid: Fix hang in kdump + +From: Raghava Aditya Renukunta + +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 +Tested-by: Guilherme G. Piccoli +Fixes: a2d0321dd532901e (scsi: aacraid: Reload offlined drives after controller reset) +Signed-off-by: Raghava Aditya Renukunta +Signed-off-by: Martin K. Petersen +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..9d27e52129c --- /dev/null +++ b/queue-4.15/scsi-aacraid-fix-udev-inquiry-race-condition.patch @@ -0,0 +1,63 @@ +From f4e8708d3104437fd7716e957f38c265b0c509ef Mon Sep 17 00:00:00 2001 +From: Raghava Aditya Renukunta +Date: Tue, 26 Dec 2017 20:34:22 -0800 +Subject: scsi: aacraid: Fix udev inquiry race condition + +From: Raghava Aditya Renukunta + +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 +Signed-off-by: Martin K. Petersen +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..c411070123a --- /dev/null +++ b/queue-4.15/scsi-storvsc-missing-error-code-in-storvsc_probe.patch @@ -0,0 +1,36 @@ +From ca8dc694045e9aa248e9916e0f614deb0494cb3d Mon Sep 17 00:00:00 2001 +From: Dan Carpenter +Date: Tue, 16 Jan 2018 13:40:22 +0300 +Subject: scsi: storvsc: missing error code in storvsc_probe() + +From: Dan Carpenter + +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 +Reviewed-by: Cathy Avery +Acked-by: K. Y. Srinivasan +Signed-off-by: Martin K. Petersen +Signed-off-by: Greg Kroah-Hartman + +--- + 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; diff --git a/queue-4.15/series b/queue-4.15/series index ee071dcd7b1..2b7c5135994 100644 --- a/queue-4.15/series +++ b/queue-4.15/series @@ -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