In the Linux kernel, the following vulnerability has been resolved:
IB/ipoib: Fix mcast list locking
Releasing the `priv->lock` while iterating the `priv->multicast_list` in `ipoib_mcast_join_task()` opens a window for `ipoib_mcast_dev_flush()` to remove the items while in the middle of iteration. If the mcast is removed while the lock was dropped, the for loop spins forever resulting in a hard lockup (as was reported on RHEL 4.18.0-372.75.1.el8_6 kernel):
Task A (kworker/u72:2 below) | Task B (kworker/u72:0 below) -----------------------------------+----------------------------------- ipoib_mcast_join_task(work) | ipoib_ib_dev_flush_light(work) spin_lock_irq(&priv->lock) | __ipoib_ib_dev_flush(priv, ...) list_for_each_entry(mcast, | ipoib_mcast_dev_flush(dev = priv->dev) &priv->multicast_list, list) | ipoib_mcast_join(dev, mcast) | spin_unlock_irq(&priv->lock) | | spin_lock_irqsave(&priv->lock, flags) | list_for_each_entry_safe(mcast, tmcast, | &priv->multicast_list, list) | list_del(&mcast->list); | list_add_tail(&mcast->list, &remove_list) | spin_unlock_irqrestore(&priv->lock, flags) spin_lock_irq(&priv->lock) | | ipoib_mcast_remove_list(&remove_list) (Here, `mcast` is no longer on the | list_for_each_entry_safe(mcast, tmcast, `priv->multicast_list` and we keep | remove_list, list) spinning on the `remove_list` of | >>> wait_for_completion(&mcast->done) the other thread which is blocked | and the list is still valid on | it's stack.)
Fix this by keeping the lock held and changing to GFP_ATOMIC to prevent eventual sleeps. Unfortunately we could not reproduce the lockup and confirm this fix but based on the code review I think this fix should address such lockups.
crash> bc 31 PID: 747 TASK: ff1c6a1a007e8000 CPU: 31 COMMAND: "kworker/u72:2" -- [exception RIP: ipoib_mcast_join_task+0x1b1] RIP: ffffffffc0944ac1 RSP: ff646f199a8c7e00 RFLAGS: 00000002 RAX: 0000000000000000 RBX: ff1c6a1a04dc82f8 RCX: 0000000000000000 work (&priv->mcast_task{,.work}) RDX: ff1c6a192d60ac68 RSI: 0000000000000286 RDI: ff1c6a1a04dc8000 &mcast->list RBP: ff646f199a8c7e90 R8: ff1c699980019420 R9: ff1c6a1920c9a000 R10: ff646f199a8c7e00 R11: ff1c6a191a7d9800 R12: ff1c6a192d60ac00 mcast R13: ff1c6a1d82200000 R14: ff1c6a1a04dc8000 R15: ff1c6a1a04dc82d8 dev priv (&priv->lock) &priv->multicast_list (aka head) ORIG_RAX: ffffffffffffffff CS: 0010 SS: 0018 --- <NMI exception stack> --- #5 [ff646f199a8c7e00] ipoib_mcast_join_task+0x1b1 at ffffffffc0944ac1 [ib_ipoib] #6 [ff646f199a8c7e98] process_one_work+0x1a7 at ffffffff9bf10967
crash> rx ff646f199a8c7e68 ff646f199a8c7e68: ff1c6a1a04dc82f8 <<< work = &priv->mcast_task.work
crash> list -hO ipoib_dev_priv.multicast_list ff1c6a1a04dc8000 (empty)
crash> ipoib_dev_priv.mcast_task.work.func,mcast_mutex.owner.counter ff1c6a1a04dc8000 mcast_task.work.func = 0xffffffffc0944910 <ipoib_mcast_join_task>, mcast_mutex.owner.counter = 0xff1c69998efec000
crash> b 8 PID: 8 TASK: ff1c69998efec000 CPU: 33 COMMAND: "kworker/u72:0" -- #3 [ff646f1980153d50] wait_for_completion+0x96 at ffffffff9c7d7646 #4 [ff646f1980153d90] ipoib_mcast_remove_list+0x56 at ffffffffc0944dc6 [ib_ipoib] #5 [ff646f1980153de8] ipoib_mcast_dev_flush+0x1a7 at ffffffffc09455a7 [ib_ipoib] #6 [ff646f1980153e58] __ipoib_ib_dev_flush+0x1a4 at ffffffffc09431a4 [ib_ipoib] #7 [ff ---truncated---
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Amazon Linux Ami 2 | — | Upgrade kernel-tools-develUpgrade perf-debuginfoUpgrade kernel-livepatch-5.10.210-201.852Upgrade kernel-headersUpgrade python-perfUpgrade perfUpgrade python-perf-debuginfoUpgrade kernel-develUpgrade kernel-debuginfo-common-aarch64Upgrade kernel-toolsUpgrade kernelUpgrade kernel-debuginfoUpgrade kernel-debuginfo-common-x86_64Upgrade bpftool-debuginfoUpgrade bpftoolUpgrade kernel-livepatch-4.14.343-259.562Upgrade kernel-tools-debuginfo | Aug 2, 2024 | Mar 6, 2024 |
| Debian | — | Upgrade linux | May 8, 2024 | Mar 6, 2024 |
| Huawei Euleros 2_0_sp10 | — | Upgrade kernel-tools-libsUpgrade kernelUpgrade kernel-abi-stablelistsUpgrade python3-perfUpgrade kernel-tools | Jul 16, 2024 | Mar 6, 2024 |
| Huawei Euleros 2_0_sp11 | — | Upgrade kernel-abi-stablelistsUpgrade kernelUpgrade kernel-toolsUpgrade bpftoolUpgrade kernel-tools-libsUpgrade python3-perf | Jun 26, 2024 | Mar 6, 2024 |
| Huawei Euleros 2_0_sp12 | — | Upgrade kernel-abi-stablelistsUpgrade kernel-tools-libsUpgrade kernel-toolsUpgrade python3-perfUpgrade kernelUpgrade bpftool | Jul 1, 2024 | Mar 6, 2024 |
| Huawei Euleros 2_0_sp8 | — | Upgrade perfUpgrade kernel-develUpgrade python-perfUpgrade kernel-toolsUpgrade bpftoolUpgrade kernelUpgrade python3-perfUpgrade kernel-headersUpgrade kernel-tools-libs | Jul 23, 2024 | Mar 6, 2024 |
| Huawei Euleros 2_0_sp9 | — | Upgrade python3-perfUpgrade kernel-toolsUpgrade kernel-tools-libsUpgrade kernel | Jul 17, 2024 | Mar 6, 2024 |
| Redhat_linux | — | No solution exists | Jul 9, 2025 | Mar 6, 2024 |
| Suse | — | Upgrade kernel-rt-develUpgrade dtb-exynosUpgrade kernel-64kb-optionalUpgrade kernel-64kb-livepatch-develUpgrade kernel-devel-rtUpgrade kernel-64kbUpgrade kernel-kvmsmallUpgrade reiserfs-kmp-defaultUpgrade dtb-lgUpgrade gfs2-kmp-64kbUpgrade dtb-freescaleUpgrade dtb-alteraUpgrade kernel-sourceUpgrade kernel-rt-livepatch-develUpgrade dtb-marvellUpgrade kernel-symsUpgrade dtb-hisiliconUpgrade kernel-macrosUpgrade kernel-docs-htmlUpgrade cluster-md-kmp-defaultUpgrade kernel-default-vdsoUpgrade kselftests-kmp-64kbUpgrade dtb-xilinxUpgrade kernel-debugUpgrade kernel-obs-qaUpgrade dtb-broadcomUpgrade dtb-amlogicUpgrade dtb-mediatekUpgrade kernel-default-optionalUpgrade kernel-default-manUpgrade kernel-syms-rtUpgrade kernel-azure-vdsoUpgrade kernel-debug-livepatch-develUpgrade kernel-rt_debug-vdsoUpgrade kernel-64kb-develUpgrade dtb-appleUpgrade kernel-azure-optionalUpgrade kernel-devel-azureUpgrade kernel-default-develUpgrade kernel-azure-extraUpgrade kernel-zfcpdumpUpgrade kernel-kvmsmall-develUpgrade ocfs2-kmp-rtUpgrade kernel-source-azureUpgrade kernel-azure-livepatch-develUpgrade cluster-md-kmp-azureUpgrade kernel-default-livepatchUpgrade dtb-amazonUpgrade dtb-apmUpgrade kernel-debug-develUpgrade dlm-kmp-64kbUpgrade kernel-kvmsmall-livepatch-develUpgrade kernel-rt_debugUpgrade kernel-syms-azureUpgrade ocfs2-kmp-64kbUpgrade dtb-amdUpgrade kernel-default-extraUpgrade kernel-develUpgrade gfs2-kmp-rtUpgrade kernel-azure-baseUpgrade kernel-default-baseUpgrade dtb-sprdUpgrade dtb-socionextUpgrade kernel-rt-optionalUpgrade kernel-docsUpgrade dtb-renesasUpgrade ocfs2-kmp-azureUpgrade dtb-qcomUpgrade reiserfs-kmp-rtUpgrade cluster-md-kmp-rtUpgrade kernel-azure-develUpgrade kernel-kvmsmall-vdsoUpgrade kernel-default-base-rebuildUpgrade kernel-obs-buildUpgrade reiserfs-kmp-azureUpgrade kernel-defaultUpgrade kernel-rt_debug-develUpgrade ocfs2-kmp-defaultUpgrade gfs2-kmp-defaultUpgrade dtb-caviumUpgrade dlm-kmp-defaultUpgrade kselftests-kmp-rtUpgrade kernel-debug-vdsoUpgrade kernel-azureUpgrade dtb-armUpgrade dlm-kmp-azureUpgrade kselftests-kmp-azureUpgrade kernel-source-rtUpgrade kernel-rtUpgrade kernel-rt-extraUpgrade gfs2-kmp-azureUpgrade dtb-rockchipUpgrade dtb-nvidiaUpgrade dlm-kmp-rtUpgrade reiserfs-kmp-64kbUpgrade kselftests-kmp-defaultUpgrade kernel-rt-vdsoUpgrade kernel-rt_debug-livepatch-develUpgrade kernel-source-vanillaUpgrade dtb-allwinnerUpgrade kernel-64kb-extraUpgrade cluster-md-kmp-64kbUpgrade kernel-default-livepatch-develUpgrade kernel-rt-livepatch | Apr 18, 2024 | Mar 6, 2024 |
| Ubuntu | — | Upgrade linux-image-5.4.0-181-genericUpgrade linux-image-nvidia-6.5Upgrade linux-image-5.15.0-1059-gcpUpgrade linux-image-bluefieldUpgrade linux-image-oracle-lts-22.04Upgrade linux-image-5.15.0-1057-intel-iotgUpgrade linux-image-5.4.0-1123-oracleUpgrade linux-image-6.5.0-1024-oracleUpgrade linux-image-lowlatency-64kUpgrade linux-image-awsUpgrade linux-image-oem-20.04bUpgrade linux-image-5.4.0-1071-ibmUpgrade linux-image-6.5.0-41-lowlatencyUpgrade linux-image-snapdragon-hwe-18.04Upgrade linux-image-nvidia-64k-6.5Upgrade linux-image-6.5.0-1021-awsUpgrade linux-image-nvidia-64k-hwe-22.04Upgrade linux-image-5.15.0-106-genericUpgrade linux-image-5.15.0-106-generic-lpaeUpgrade linux-image-5.15.0-1058-gkeUpgrade linux-image-generic-lpaeUpgrade linux-image-azure-cvmUpgrade linux-image-starfiveUpgrade linux-image-6.5.0-1015-starfiveUpgrade linux-image-oracleUpgrade linux-image-5.15.0-1054-ibmUpgrade linux-image-oracle-lts-20.04Upgrade linux-image-lowlatencyUpgrade linux-image-lowlatency-64k-hwe-20.04Upgrade linux-image-5.15.0-1063-azure-fdeUpgrade linux-image-raspi-nolpaeUpgrade linux-image-oemUpgrade linux-image-5.4.0-1108-raspiUpgrade linux-image-5.15.0-1058-kvmUpgrade linux-image-azure-lts-20.04Upgrade linux-image-6.1.0-1035-oemUpgrade linux-image-5.15.0-1054-nvidia-lowlatencyUpgrade linux-image-xilinx-zynqmpUpgrade linux-image-6.5.0-1024-oracle-64kUpgrade linux-image-nvidiaUpgrade linux-image-oem-22.04aUpgrade linux-image-5.4.0-1084-bluefieldUpgrade linux-image-genericUpgrade linux-image-oem-22.04Upgrade linux-image-6.5.0-41-lowlatency-64kUpgrade linux-image-gcp-lts-22.04Upgrade linux-image-5.15.0-106-lowlatencyUpgrade linux-image-6.5.0-1021-nvidia-64kUpgrade linux-image-ibmUpgrade linux-image-aws-lts-20.04Upgrade linux-image-gke-5.15Upgrade linux-image-5.4.0-181-generic-lpaeUpgrade linux-image-5.15.0-106-generic-64kUpgrade linux-image-azure-fdeUpgrade linux-image-6.5.0-1021-nvidiaUpgrade linux-image-nvidia-lowlatencyUpgrade linux-image-5.15.0-1063-azureUpgrade linux-image-generic-64k-hwe-20.04Upgrade linux-image-6.5.0-1022-azure-fdeUpgrade linux-image-6.5.0-1022-gcpUpgrade linux-image-5.15.0-106-lowlatency-64kUpgrade linux-image-lowlatency-hwe-22.04Upgrade linux-image-lowlatency-hwe-20.04Upgrade linux-image-intel-iotgUpgrade linux-image-oem-20.04cUpgrade linux-image-virtual-hwe-22.04Upgrade linux-image-5.4.0-181-lowlatencyUpgrade linux-image-nvidia-hwe-22.04Upgrade linux-image-5.4.0-1128-gcpUpgrade linux-image-lowlatency-64k-hwe-22.04Upgrade linux-image-oem-22.04bUpgrade linux-image-5.15.0-1061-awsUpgrade linux-image-oem-22.04cUpgrade linux-image-azure-fde-lts-22.04Upgrade linux-image-virtualUpgrade linux-image-6.5.0-1018-raspiUpgrade linux-image-gcpUpgrade linux-image-oem-20.04dUpgrade linux-image-generic-64k-hwe-22.04Upgrade linux-image-lowlatency-hwe-18.04Upgrade linux-image-gkeop-5.15Upgrade linux-image-raspiUpgrade linux-image-virtual-hwe-20.04Upgrade linux-image-6.5.0-1024-oemUpgrade linux-image-5.15.0-1054-nvidiaUpgrade linux-image-azure-lts-22.04Upgrade linux-image-5.4.0-1036-iotUpgrade linux-image-raspi-hwe-18.04Upgrade linux-image-kvmUpgrade linux-image-generic-hwe-18.04Upgrade linux-image-oem-22.04dUpgrade linux-image-oracle-64kUpgrade linux-image-aws-lts-22.04Upgrade linux-image-intelUpgrade linux-image-oem-20.04Upgrade linux-image-gkeopUpgrade linux-image-laptop-23.10Upgrade linux-image-6.5.0-1017-laptopUpgrade linux-image-generic-hwe-20.04Upgrade linux-image-virtual-hwe-18.04Upgrade linux-image-5.15.0-1058-intel-iotgUpgrade linux-image-5.15.0-1059-oracleUpgrade linux-image-generic-64kUpgrade linux-image-5.4.0-1091-gkeopUpgrade linux-image-5.4.0-1112-kvmUpgrade linux-image-5.15.0-1044-gkeopUpgrade linux-image-6.5.0-1022-azureUpgrade linux-image-5.15.0-1054-raspiUpgrade linux-image-5.4.0-1129-azureUpgrade linux-image-generic-hwe-22.04Upgrade linux-image-oem-osp1Upgrade linux-image-5.4.0-1124-awsUpgrade linux-image-gkeop-5.4Upgrade linux-image-azureUpgrade linux-image-gkeUpgrade linux-image-raspi2Upgrade linux-image-ibm-lts-20.04Upgrade linux-image-5.4.0-1043-xilinx-zynqmpUpgrade linux-image-gcp-lts-20.04Upgrade linux-image-6.5.0-41-generic-64kUpgrade linux-image-generic-lpae-hwe-20.04Upgrade linux-image-6.5.0-41-generic | Mar 12, 2024 | Mar 6, 2024 |
| Vmware Photon_os | — | Use 'tdnf update' to upgrade all packages to the latest version. | Jan 20, 2025 | Mar 6, 2024 |
With curated Threat Intelligence, you can see which vulnerabilities truly put you at risk, prioritize what matters most, and act before attackers do.
Explore Intelligence Hub