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