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-64k-debug-modules-extraUpgrade kernel-64k-debug-devel-matchedUpgrade kernel-64kUpgrade kernel-zfcpdump-coreUpgrade kernel-rt-debug-develUpgrade kernel-64k-modulesUpgrade kernel-abi-stablelistsUpgrade rvUpgrade kernel-64k-devel-matchedUpgrade kernel-64k-debugUpgrade kernel-rt-modules-coreUpgrade kernel-toolsUpgrade kernel-debug-devel-matchedUpgrade kernel-zfcpdump-modules-coreUpgrade kernel-rt-debug-modules-coreUpgrade kernelUpgrade libperfUpgrade kernel-rtUpgrade kernel-devel-matchedUpgrade kernel-debug-modulesUpgrade kernel-debug-modules-extraUpgrade kernel-tools-libs-develUpgrade kernel-64k-coreUpgrade kernel-rt-debug-modules-extraUpgrade kernel-modules-coreUpgrade kernel-zfcpdump-modulesUpgrade kernel-cross-headersUpgrade kernel-headersUpgrade kernel-uki-virtUpgrade kernel-rt-modulesUpgrade kernel-rt-modules-extraUpgrade python3-perfUpgrade kernel-rt-debugUpgrade kernel-debug-develUpgrade kernel-rt-develUpgrade kernel-develUpgrade kernel-zfcpdump-modules-extraUpgrade kernel-debug-modules-coreUpgrade kernel-zfcpdump-devel-matchedUpgrade kernel-rt-coreUpgrade kernel-64k-debug-coreUpgrade kernel-64k-debug-modulesUpgrade kernel-coreUpgrade kernel-64k-modules-coreUpgrade kernel-modulesUpgrade kernel-debug-uki-virtUpgrade kernel-tools-libsUpgrade kernel-debugUpgrade kernel-zfcpdump-develUpgrade kernel-64k-debug-modules-coreUpgrade kernel-rt-debug-modulesUpgrade kernel-debug-coreUpgrade kernel-modules-extraUpgrade kernel-docUpgrade bpftoolUpgrade kernel-64k-develUpgrade perfUpgrade kernel-64k-modules-extraUpgrade kernel-zfcpdumpUpgrade kernel-64k-debug-develUpgrade kernel-rt-debug-coreUpgrade rtla | 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 | — | Upgrade kernelUpgrade kernel-rtNo solution exists | Dec 5, 2024 | May 20, 2024 |
| Suse | — | Upgrade dtb-qcomUpgrade dtb-caviumUpgrade dtb-renesasUpgrade kernel-azureUpgrade kernel-kvmsmall-vdsoUpgrade kernel-obs-buildUpgrade kernel-rt-vdsoUpgrade gfs2-kmp-azureUpgrade gfs2-kmp-defaultUpgrade dtb-allwinnerUpgrade dtb-broadcomUpgrade kernel-docs-htmlUpgrade ocfs2-kmp-azureUpgrade kernel-default-livepatch-develUpgrade kernel-azure-optionalUpgrade kernel-source-rtUpgrade reiserfs-kmp-64kbUpgrade cluster-md-kmp-rtUpgrade dtb-rockchipUpgrade kernel-default-base-rebuildUpgrade dtb-alteraUpgrade cluster-md-kmp-64kbUpgrade dtb-sprdUpgrade kernel-docsUpgrade kernel-debug-vdsoUpgrade kernel-azure-develUpgrade dtb-socionextUpgrade kernel-64kb-extraUpgrade kernel-default-baseUpgrade ocfs2-kmp-defaultUpgrade kernel-rt-optionalUpgrade kernel-rt_debug-develUpgrade kernel-defaultUpgrade dtb-nvidiaUpgrade kernel-rtUpgrade dlm-kmp-rtUpgrade kernel-rt-extraUpgrade kernel-source-vanillaUpgrade ocfs2-kmp-64kbUpgrade kernel-rt_debug-livepatch-develUpgrade dlm-kmp-defaultUpgrade kselftests-kmp-azureUpgrade kselftests-kmp-rtUpgrade reiserfs-kmp-azureUpgrade reiserfs-kmp-rtUpgrade reiserfs-kmp-defaultUpgrade ocfs2-kmp-rtUpgrade kernel-rt-livepatch-develUpgrade kernel-rt-develUpgrade kernel-devel-azureUpgrade gfs2-kmp-rtUpgrade kernel-kvmsmallUpgrade kernel-default-livepatchUpgrade kernel-64kb-develUpgrade dtb-exynosUpgrade dlm-kmp-azureUpgrade cluster-md-kmp-defaultUpgrade kselftests-kmp-defaultUpgrade kernel-rt_debug-vdsoUpgrade dtb-marvellUpgrade dtb-armUpgrade dlm-kmp-64kbUpgrade kernel-syms-azureUpgrade kernel-default-develUpgrade dtb-lgUpgrade dtb-amlogicUpgrade kernel-default-optionalUpgrade dtb-hisiliconUpgrade kernel-default-extraUpgrade kernel-azure-extraUpgrade dtb-amazonUpgrade dtb-apmUpgrade kernel-debugUpgrade kselftests-kmp-64kbUpgrade kernel-macrosUpgrade kernel-kvmsmall-develUpgrade kernel-source-azureUpgrade kernel-64kb-livepatch-develUpgrade kernel-syms-rtUpgrade kernel-zfcpdumpUpgrade kernel-devel-rtUpgrade kernel-obs-qaUpgrade kernel-azure-livepatch-develUpgrade dtb-mediatekUpgrade cluster-md-kmp-azureUpgrade kernel-debug-develUpgrade kernel-debug-livepatch-develUpgrade kernel-sourceUpgrade kernel-develUpgrade kernel-default-vdsoUpgrade kernel-64kbUpgrade dtb-freescaleUpgrade dtb-amdUpgrade dtb-xilinxUpgrade kernel-kvmsmall-livepatch-develUpgrade kernel-azure-vdsoUpgrade kernel-symsUpgrade dtb-appleUpgrade gfs2-kmp-64kbUpgrade kernel-rt_debugUpgrade kernel-64kb-optional | Aug 8, 2024 | May 20, 2024 |
| Ubuntu | — | Upgrade linux-image-6.8.0-1011-nvidia-64kUpgrade linux-image-raspiUpgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-ibmUpgrade linux-image-6.8.0-1012-azure-fdeUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-kvmUpgrade linux-image-6.8.0-1011-nvidiaUpgrade linux-image-nvidia-lowlatency-64kUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-awsUpgrade linux-image-6.8.0-1012-azureUpgrade linux-image-6.8.0-40-lowlatency-64kUpgrade linux-image-azureUpgrade linux-image-6.8.0-1010-oemUpgrade linux-image-nvidiaUpgrade linux-image-generic-lpaeUpgrade linux-image-6.8.0-40-generic-64kUpgrade linux-image-6.8.0-1010-ibmUpgrade linux-image-6.8.0-1013-awsUpgrade linux-image-6.8.0-1012-gcpUpgrade linux-image-nvidia-lowlatencyUpgrade linux-image-azure-fdeUpgrade linux-image-generic-64kUpgrade linux-image-ibm-classicUpgrade linux-image-lowlatencyUpgrade linux-image-6.8.0-1009-raspiUpgrade linux-image-oem-24.04aUpgrade linux-image-oem-24.04Upgrade linux-image-lowlatency-64kUpgrade linux-image-6.8.0-1008-gkeUpgrade linux-image-gcpUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-6.8.0-40-lowlatencyUpgrade linux-image-nvidia-64kUpgrade linux-image-6.8.0-1011-nvidia-lowlatencyUpgrade linux-image-nvidia-64k-6.8Upgrade linux-image-gkeUpgrade linux-image-genericUpgrade linux-image-oracleUpgrade linux-image-6.8.0-1010-oracle-64kUpgrade linux-image-nvidia-6.8Upgrade linux-image-6.8.0-1010-oracleUpgrade linux-image-oracle-64kUpgrade linux-image-6.8.0-40-genericUpgrade linux-image-virtualUpgrade linux-image-6.8.0-1011-nvidia-lowlatency-64k | Aug 9, 2024 | May 20, 2024 |
Prioritise 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