In the Linux kernel, the following vulnerability has been resolved:
ice: fix LAG and VF lock dependency in ice_reset_vf()
9f74a3dfcf83 ("ice: Fix VF Reset paths when interface in a failed over aggregate"), the ice driver has acquired the LAG mutex in ice_reset_vf(). The commit placed this lock acquisition just prior to the acquisition of the VF configuration lock.
If ice_reset_vf() acquires the configuration lock via the ICE_VF_RESET_LOCK flag, this could deadlock with ice_vc_cfg_qs_msg() because it always acquires the locks in the order of the VF configuration lock and then the LAG mutex.
Lockdep reports this violation almost immediately on creating and then removing 2 VF:
====================================================== WARNING: possible circular locking dependency detected 6.8.0-rc6 #54 Tainted: G W O ------------------------------------------------------ kworker/60:3/6771 is trying to acquire lock: ff40d43e099380a0 (&vf->cfg_lock){+.+.}-{3:3}, at: ice_reset_vf+0x22f/0x4d0 [ice]
but task is already holding lock: ff40d43ea1961210 (&pf->lag_mutex){+.+.}-{3:3}, at: ice_reset_vf+0xb7/0x4d0 [ice]
which lock already depends on the new lock.
the existing dependency chain (in reverse order) is:
-> #1 (&pf->lag_mutex){+.+.}-{3:3}: __lock_acquire+0x4f8/0xb40 lock_acquire+0xd4/0x2d0 __mutex_lock+0x9b/0xbf0 ice_vc_cfg_qs_msg+0x45/0x690 [ice] ice_vc_process_vf_msg+0x4f5/0x870 [ice] __ice_clean_ctrlq+0x2b5/0x600 [ice] ice_service_task+0x2c9/0x480 [ice] process_one_work+0x1e9/0x4d0 worker_thread+0x1e1/0x3d0 kthread+0x104/0x140 ret_from_fork+0x31/0x50 ret_from_fork_asm+0x1b/0x30
-> #0 (&vf->cfg_lock){+.+.}-{3:3}: check_prev_add+0xe2/0xc50 validate_chain+0x558/0x800 __lock_acquire+0x4f8/0xb40 lock_acquire+0xd4/0x2d0 __mutex_lock+0x9b/0xbf0 ice_reset_vf+0x22f/0x4d0 [ice] ice_process_vflr_event+0x98/0xd0 [ice] ice_service_task+0x1cc/0x480 [ice] process_one_work+0x1e9/0x4d0 worker_thread+0x1e1/0x3d0 kthread+0x104/0x140 ret_from_fork+0x31/0x50 ret_from_fork_asm+0x1b/0x30
other info that might help us debug this: Possible unsafe locking scenario: CPU0 CPU1 ---- ---- lock(&pf->lag_mutex); lock(&vf->cfg_lock); lock(&pf->lag_mutex); lock(&vf->cfg_lock);
*** DEADLOCK *** 4 locks held by kworker/60:3/6771: #0: ff40d43e05428b38 ((wq_completion)ice){+.+.}-{0:0}, at: process_one_work+0x176/0x4d0 #1: ff50d06e05197e58 ((work_completion)(&pf->serv_task)){+.+.}-{0:0}, at: process_one_work+0x176/0x4d0 #2: ff40d43ea1960e50 (&pf->vfs.table_lock){+.+.}-{3:3}, at: ice_process_vflr_event+0x48/0xd0 [ice] #3: ff40d43ea1961210 (&pf->lag_mutex){+.+.}-{3:3}, at: ice_reset_vf+0xb7/0x4d0 [ice]
stack backtrace: CPU: 60 PID: 6771 Comm: kworker/60:3 Tainted: G W O 6.8.0-rc6 #54 Hardware name: Workqueue: ice ice_service_task [ice] Call Trace: <TASK> dump_stack_lvl+0x4a/0x80 check_noncircular+0x12d/0x150 check_prev_add+0xe2/0xc50 ? save_trace+0x59/0x230 ? add_chain_cache+0x109/0x450 validate_chain+0x558/0x800 __lock_acquire+0x4f8/0xb40 ? lockdep_hardirqs_on+0x7d/0x100 lock_acquire+0xd4/0x2d0 ? ice_reset_vf+0x22f/0x4d0 [ice] ? lock_is_held_type+0xc7/0x120 __mutex_lock+0x9b/0xbf0 ? ice_reset_vf+0x22f/0x4d0 [ice] ? ice_reset_vf+0x22f/0x4d0 [ice] ? rcu_is_watching+0x11/0x50 ? ice_reset_vf+0x22f/0x4d0 [ice] ice_reset_vf+0x22f/0x4d0 [ice] ? process_one_work+0x176/0x4d0 ice_process_vflr_event+0x98/0xd0 [ice] ice_service_task+0x1cc/0x480 [ice] process_one_work+0x1e9/0x4d0 worker_thread+0x1e1/0x3d0 ? __pfx_worker_thread+0x10/0x10 kthread+0x104/0x140 ? __pfx_kthread+0x10/0x10 ret_from_fork+0x31/0x50 ? __pfx_kthread+0x10/0x10 ret_from_fork_asm+0x1b/0x30 </TASK>
To avoid deadlock, we must acquire the LAG ---truncated---
CVSS Details
- CVSS 3.1 Base Score: 5.5
- CVSS 3.1 Vector: (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Alma_linux | — | Upgrade kernel-rt-debug-modules-coreUpgrade libperfUpgrade kernel-cross-headersUpgrade kernel-rt-modulesUpgrade kernel-zfcpdump-coreUpgrade kernel-tools-libs-develUpgrade kernel-64k-debugUpgrade kernel-zfcpdump-modulesUpgrade kernel-abi-stablelistsUpgrade kernel-rt-debug-modules-extraUpgrade kernel-rt-modules-coreUpgrade kernel-debug-devel-matchedUpgrade kernel-uki-virtUpgrade rvUpgrade kernel-toolsUpgrade kernel-rtUpgrade kernel-debug-modulesUpgrade kernel-64k-coreUpgrade kernel-debug-modules-extraUpgrade kernel-64k-devel-matchedUpgrade kernel-zfcpdump-modules-coreUpgrade kernelUpgrade kernel-64k-debug-modules-extraUpgrade kernel-64k-debug-devel-matchedUpgrade kernel-modules-coreUpgrade kernel-headersUpgrade kernel-64k-modulesUpgrade kernel-64kUpgrade kernel-devel-matchedUpgrade kernel-rt-debug-develUpgrade kernel-64k-modules-coreUpgrade kernel-rt-develUpgrade perfUpgrade kernel-zfcpdump-devel-matchedUpgrade kernel-debugUpgrade kernel-tools-libsUpgrade kernel-debug-uki-virtUpgrade kernel-64k-debug-develUpgrade python3-perfUpgrade kernel-rt-debug-coreUpgrade kernel-modulesUpgrade kernel-rt-modules-extraUpgrade kernel-modules-extraUpgrade kernel-debug-coreUpgrade kernel-64k-modules-extraUpgrade bpftoolUpgrade kernel-64k-debug-coreUpgrade kernel-develUpgrade kernel-debug-develUpgrade kernel-docUpgrade kernel-debug-modules-coreUpgrade kernel-zfcpdumpUpgrade rtlaUpgrade kernel-zfcpdump-modules-extraUpgrade kernel-rt-coreUpgrade kernel-rt-debugUpgrade kernel-coreUpgrade kernel-64k-debug-modulesUpgrade kernel-64k-debug-modules-coreUpgrade kernel-64k-develUpgrade kernel-zfcpdump-develUpgrade kernel-rt-debug-modules | Nov 4, 2024 | May 20, 2024 |
| Debian | — | Upgrade linux | Jul 27, 2026 | Jul 27, 2026 |
| Oracle_linux | — | Upgrade kernel | Oct 16, 2024 | May 20, 2024 |
| Redhat_linux | — | No solution existsUpgrade kernel-rtUpgrade kernel | Dec 5, 2024 | May 20, 2024 |
| Suse | — | Upgrade kernel-debug-vdsoUpgrade dlm-kmp-defaultUpgrade kernel-defaultUpgrade kselftests-kmp-rtUpgrade reiserfs-kmp-azureUpgrade kernel-azure-develUpgrade kernel-rt-optionalUpgrade kernel-rt-vdsoUpgrade kernel-rt_debug-develUpgrade ocfs2-kmp-defaultUpgrade reiserfs-kmp-rtUpgrade dtb-nvidiaUpgrade kernel-default-baseUpgrade kernel-rtUpgrade kernel-azure-optionalUpgrade dtb-alteraUpgrade ocfs2-kmp-azureUpgrade dtb-broadcomUpgrade kernel-default-base-rebuildUpgrade kernel-default-livepatch-develUpgrade kernel-docs-htmlUpgrade gfs2-kmp-azureUpgrade kernel-rt-extraUpgrade kernel-source-rtUpgrade dtb-sprdUpgrade reiserfs-kmp-64kbUpgrade dtb-caviumUpgrade dtb-rockchipUpgrade cluster-md-kmp-rtUpgrade gfs2-kmp-defaultUpgrade kernel-obs-buildUpgrade kselftests-kmp-azureUpgrade dlm-kmp-rtUpgrade dtb-renesasUpgrade ocfs2-kmp-64kbUpgrade kernel-source-vanillaUpgrade dtb-qcomUpgrade kernel-kvmsmall-vdsoUpgrade dtb-allwinnerUpgrade dtb-socionextUpgrade kernel-rt_debug-livepatch-develUpgrade kernel-azureUpgrade kernel-64kb-livepatch-develUpgrade dtb-mediatekUpgrade dtb-lgUpgrade dtb-amlogicUpgrade cluster-md-kmp-azureUpgrade kernel-obs-qaUpgrade kernel-devel-rtUpgrade kernel-azure-livepatch-develUpgrade kernel-kvmsmall-develUpgrade kernel-azure-extraUpgrade cluster-md-kmp-defaultUpgrade dlm-kmp-azureUpgrade kernel-symsUpgrade kselftests-kmp-defaultUpgrade kernel-rt_debug-vdsoUpgrade kernel-64kb-develUpgrade dtb-exynosUpgrade kernel-64kb-optionalUpgrade dtb-appleUpgrade kernel-rt-livepatch-develUpgrade kernel-rt-develUpgrade kernel-syms-azureUpgrade kernel-devel-azureUpgrade dtb-marvellUpgrade gfs2-kmp-rtUpgrade dtb-armUpgrade kernel-default-develUpgrade dlm-kmp-64kbUpgrade dtb-amazonUpgrade kernel-default-extraUpgrade dtb-apmUpgrade kernel-zfcpdumpUpgrade kernel-source-azureUpgrade kernel-sourceUpgrade kernel-macrosUpgrade kernel-default-vdsoUpgrade kernel-default-optionalUpgrade kernel-debug-livepatch-develUpgrade kernel-azure-vdsoUpgrade kernel-64kbUpgrade dtb-freescaleUpgrade gfs2-kmp-64kbUpgrade kernel-rt_debugUpgrade reiserfs-kmp-defaultUpgrade kernel-kvmsmallUpgrade kernel-default-livepatchUpgrade kselftests-kmp-64kbUpgrade kernel-debugUpgrade ocfs2-kmp-rtUpgrade kernel-syms-rtUpgrade kernel-develUpgrade kernel-debug-develUpgrade kernel-kvmsmall-livepatch-develUpgrade dtb-xilinxUpgrade dtb-amdUpgrade dtb-hisiliconUpgrade kernel-64kb-extraUpgrade kernel-docsUpgrade cluster-md-kmp-64kb | Aug 8, 2024 | May 20, 2024 |
| Ubuntu | — | Upgrade linux-image-nvidiaUpgrade linux-image-azure-fdeUpgrade linux-image-6.8.0-1011-nvidia-64kUpgrade linux-image-nvidia-lowlatency-64kUpgrade linux-image-6.8.0-40-generic-64kUpgrade linux-image-generic-64kUpgrade linux-image-awsUpgrade linux-image-kvmUpgrade linux-image-generic-lpaeUpgrade linux-image-6.8.0-1012-azure-fdeUpgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-6.8.0-1013-awsUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-ibm-lts-24.04Upgrade linux-image-ibmUpgrade linux-image-nvidia-lowlatencyUpgrade linux-image-6.8.0-40-lowlatency-64kUpgrade linux-image-6.8.0-1012-gcpUpgrade linux-image-azureUpgrade linux-image-6.8.0-1010-oemUpgrade linux-image-6.8.0-1010-ibmUpgrade linux-image-raspiUpgrade linux-image-6.8.0-1011-nvidiaUpgrade linux-image-ibm-classicUpgrade linux-image-lowlatencyUpgrade linux-image-6.8.0-1012-azureUpgrade linux-image-6.8.0-1009-raspiUpgrade linux-image-nvidia-64kUpgrade linux-image-oem-24.04aUpgrade linux-image-oem-24.04Upgrade linux-image-6.8.0-40-genericUpgrade linux-image-lowlatency-64kUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-6.8.0-1010-oracleUpgrade linux-image-gcpUpgrade linux-image-virtualUpgrade linux-image-6.8.0-40-lowlatencyUpgrade linux-image-6.8.0-1011-nvidia-lowlatency-64kUpgrade linux-image-oracle-64kUpgrade linux-image-oracleUpgrade linux-image-nvidia-6.8Upgrade linux-image-gkeUpgrade linux-image-genericUpgrade linux-image-6.8.0-1010-oracle-64kUpgrade linux-image-nvidia-64k-6.8Upgrade linux-image-6.8.0-1011-nvidia-lowlatencyUpgrade linux-image-6.8.0-1008-gke | Aug 9, 2024 | May 20, 2024 |
Prioritize with Active Threat Intelligence
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