In the Linux kernel, the following vulnerability has been resolved:
net/mlx5e: Prevent deadlock while disabling aRFS
When disabling aRFS under the `priv->state_lock`, any scheduled aRFS works are canceled using the `cancel_work_sync` function, which waits for the work to end if it has already started. However, while waiting for the work handler, the handler will try to acquire the `state_lock` which is already acquired.
The worker acquires the lock to delete the rules if the state is down, which is not the worker's responsibility since disabling aRFS deletes the rules.
Add an aRFS state variable, which indicates whether the aRFS is enabled and prevent adding rules when the aRFS is disabled.
Kernel log:
====================================================== WARNING: possible circular locking dependency detected 6.7.0-rc4_net_next_mlx5_5483eb2 #1 Tainted: G I ------------------------------------------------------ ethtool/386089 is trying to acquire lock: ffff88810f21ce68 ((work_completion)(&rule->arfs_work)){+.+.}-{0:0}, at: __flush_work+0x74/0x4e0
but task is already holding lock: ffff8884a1808cc0 (&priv->state_lock){+.+.}-{3:3}, at: mlx5e_ethtool_set_channels+0x53/0x200 [mlx5_core]
which lock already depends on the new lock.
the existing dependency chain (in reverse order) is:
-> #1 (&priv->state_lock){+.+.}-{3:3}: __mutex_lock+0x80/0xc90 arfs_handle_work+0x4b/0x3b0 [mlx5_core] process_one_work+0x1dc/0x4a0 worker_thread+0x1bf/0x3c0 kthread+0xd7/0x100 ret_from_fork+0x2d/0x50 ret_from_fork_asm+0x11/0x20
-> #0 ((work_completion)(&rule->arfs_work)){+.+.}-{0:0}: __lock_acquire+0x17b4/0x2c80 lock_acquire+0xd0/0x2b0 __flush_work+0x7a/0x4e0 __cancel_work_timer+0x131/0x1c0 arfs_del_rules+0x143/0x1e0 [mlx5_core] mlx5e_arfs_disable+0x1b/0x30 [mlx5_core] mlx5e_ethtool_set_channels+0xcb/0x200 [mlx5_core] ethnl_set_channels+0x28f/0x3b0 ethnl_default_set_doit+0xec/0x240 genl_family_rcv_msg_doit+0xd0/0x120 genl_rcv_msg+0x188/0x2c0 netlink_rcv_skb+0x54/0x100 genl_rcv+0x24/0x40 netlink_unicast+0x1a1/0x270 netlink_sendmsg+0x214/0x460 __sock_sendmsg+0x38/0x60 __sys_sendto+0x113/0x170 __x64_sys_sendto+0x20/0x30 do_syscall_64+0x40/0xe0 entry_SYSCALL_64_after_hwframe+0x46/0x4e
other info that might help us debug this:
Possible unsafe locking scenario:
CPU0 CPU1 ---- ---- lock(&priv->state_lock); lock((work_completion)(&rule->arfs_work)); lock(&priv->state_lock); lock((work_completion)(&rule->arfs_work));
*** DEADLOCK ***
3 locks held by ethtool/386089: #0: ffffffff82ea7210 (cb_lock){++++}-{3:3}, at: genl_rcv+0x15/0x40 #1: ffffffff82e94c88 (rtnl_mutex){+.+.}-{3:3}, at: ethnl_default_set_doit+0xd3/0x240 #2: ffff8884a1808cc0 (&priv->state_lock){+.+.}-{3:3}, at: mlx5e_ethtool_set_channels+0x53/0x200 [mlx5_core]
stack backtrace: CPU: 15 PID: 386089 Comm: ethtool Tainted: G I 6.7.0-rc4_net_next_mlx5_5483eb2 #1 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014 Call Trace: <TASK> dump_stack_lvl+0x60/0xa0 check_noncircular+0x144/0x160 __lock_acquire+0x17b4/0x2c80 lock_acquire+0xd0/0x2b0 ? __flush_work+0x74/0x4e0 ? save_trace+0x3e/0x360 ? __flush_work+0x74/0x4e0 __flush_work+0x7a/0x4e0 ? __flush_work+0x74/0x4e0 ? __lock_acquire+0xa78/0x2c80 ? lock_acquire+0xd0/0x2b0 ? mark_held_locks+0x49/0x70 __cancel_work_timer+0x131/0x1c0 ? mark_held_locks+0x49/0x70 arfs_del_rules+0x143/0x1e0 [mlx5_core] mlx5e_arfs_disable+0x1b/0x30 [mlx5_core] mlx5e_ethtool_set_channels+0xcb/0x200 [mlx5_core] ethnl_set_channels+0x28f/0x3b0 ethnl_default_set_doit+0xec/0x240 genl_family_rcv_msg_doit+0xd0/0x120 genl_rcv_msg+0x188/0x2c0 ? ethn ---truncated---
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Alma_linux | — | Upgrade kernel-tools-libsUpgrade kernel-zfcpdump-coreUpgrade kernel-toolsUpgrade kernel-abi-stablelistsUpgrade kernel-rt-debugUpgrade kernel-rt-debug-coreUpgrade kernel-rtUpgrade kernel-debug-modules-extraUpgrade kernel-rt-kvmUpgrade kernel-rt-modules-extraUpgrade kernel-rt-modulesUpgrade kernel-zfcpdump-modulesUpgrade kernel-debug-modulesUpgrade kernel-docUpgrade bpftoolUpgrade perfUpgrade kernel-rt-develUpgrade kernel-tools-libs-develUpgrade kernel-develUpgrade kernel-headersUpgrade kernel-debug-develUpgrade kernel-rt-debug-modulesUpgrade kernel-modules-extraUpgrade kernel-debug-coreUpgrade kernelUpgrade kernel-rt-debug-kvmUpgrade kernel-debugUpgrade python3-perfUpgrade kernel-modulesUpgrade kernel-cross-headersUpgrade kernel-zfcpdump-modules-extraUpgrade kernel-rt-coreUpgrade kernel-coreUpgrade kernel-rt-debug-modules-extraUpgrade kernel-zfcpdumpUpgrade kernel-zfcpdump-develUpgrade kernel-rt-debug-devel | Jun 6, 2024 | May 1, 2024 |
| Debian | — | Upgrade linux | May 8, 2024 | May 1, 2024 |
| Huawei Euleros 2_0_sp10 | — | Upgrade kernel-abi-stablelistsUpgrade kernel-tools-libsUpgrade kernelUpgrade python3-perfUpgrade kernel-tools | Jul 16, 2024 | May 1, 2024 |
| Huawei Euleros 2_0_sp11 | — | Upgrade kernelUpgrade kernel-abi-stablelistsUpgrade python3-perfUpgrade kernel-tools-libsUpgrade kernel-toolsUpgrade bpftool | Oct 8, 2024 | May 1, 2024 |
| Huawei Euleros 2_0_sp12 | — | Upgrade kernel-toolsUpgrade kernel-abi-stablelistsUpgrade kernel-tools-libsUpgrade bpftoolUpgrade kernelUpgrade python3-perf | Oct 8, 2024 | May 1, 2024 |
| Huawei Euleros 2_0_sp9 | — | Upgrade kernel-toolsUpgrade kernel-tools-libsUpgrade python3-perfUpgrade kernel | Jul 17, 2024 | May 1, 2024 |
| Oracle_linux | — | Upgrade kernel | Jun 6, 2024 | May 1, 2024 |
| Redhat_linux | — | Upgrade kernel-rtUpgrade kernelNo solution exists | Jun 6, 2024 | May 1, 2024 |
| Rocky_linux | — | Upgrade kernel-headersUpgrade kernel-debug-modules-extraUpgrade kernel-debug-debuginfoUpgrade kernel-debuginfoUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-rt-debug-modulesUpgrade kernel-debug-coreUpgrade kernel-tools-debuginfoUpgrade kernel-cross-headersUpgrade kernel-debugUpgrade kernel-rt-debug-kvmUpgrade kernel-coreUpgrade kernel-modulesUpgrade kernel-rt-debug-modules-extraUpgrade kernel-rt-coreUpgrade kernel-rt-debug-develUpgrade kernel-modules-extraUpgrade perf-debuginfoUpgrade python3-perfUpgrade kernelUpgrade kernel-debug-develUpgrade kernel-rt-kvmUpgrade kernel-rt-debugUpgrade kernel-develUpgrade bpftool-debuginfoUpgrade perfUpgrade kernel-debug-modulesUpgrade kernel-rt-debuginfo-common-x86_64Upgrade kernel-rt-debuginfoUpgrade bpftoolUpgrade kernel-rt-develUpgrade kernel-toolsUpgrade python3-perf-debuginfoUpgrade kernel-rt-debug-coreUpgrade kernel-rtUpgrade kernel-tools-libs-develUpgrade kernel-tools-libsUpgrade kernel-rt-debug-debuginfoUpgrade kernel-rt-modules-extraUpgrade kernel-rt-modules | Jun 17, 2024 | May 1, 2024 |
| Suse | — | Upgrade kernel-64kb-livepatch-develUpgrade kernel-default-livepatchUpgrade kernel-syms-azureUpgrade dlm-kmp-azureUpgrade kernel-default-base-rebuildUpgrade dlm-kmp-64kbUpgrade dtb-amlogicUpgrade dtb-exynosUpgrade kernel-rt-livepatch-develUpgrade kernel-default-develUpgrade kernel-kvmsmall-livepatch-develUpgrade kernel-zfcpdumpUpgrade gfs2-kmp-rtUpgrade kernel-default-manUpgrade kernel-syms-rtUpgrade kernel-azure-livepatch-develUpgrade kernel-devel-azureUpgrade kernel-sourceUpgrade kernel-default-extraUpgrade dtb-mediatekUpgrade kernel-azure-baseUpgrade cluster-md-kmp-defaultUpgrade dtb-apmUpgrade kernel-rtUpgrade kernel-default-vdsoUpgrade dtb-freescaleUpgrade kernel-symsUpgrade dtb-armUpgrade kernel-obs-qaUpgrade kernel-kvmsmall-develUpgrade gfs2-kmp-64kbUpgrade kernel-azure-develUpgrade dtb-broadcomUpgrade dtb-qcomUpgrade kselftests-kmp-64kbUpgrade reiserfs-kmp-azureUpgrade kernel-macrosUpgrade cluster-md-kmp-azureUpgrade dtb-amazonUpgrade kernel-azure-optionalUpgrade kernel-debug-livepatch-develUpgrade ocfs2-kmp-rtUpgrade kernel-kvmsmall-vdsoUpgrade kernel-rt-vdsoUpgrade kernel-kvmsmallUpgrade kernel-64kbUpgrade kernel-rt_debug-vdsoUpgrade dtb-lgUpgrade kernel-azure-vdsoUpgrade kernel-source-azureUpgrade kernel-debugUpgrade ocfs2-kmp-defaultUpgrade dtb-xilinxUpgrade dtb-socionextUpgrade kselftests-kmp-azureUpgrade kernel-rt-develUpgrade ocfs2-kmp-64kbUpgrade kernel-rt_debug-livepatch-develUpgrade kernel-rt-extraUpgrade kernel-default-baseUpgrade kernel-debug-vdsoUpgrade kernel-azureUpgrade dtb-amdUpgrade cluster-md-kmp-64kbUpgrade dtb-appleUpgrade dlm-kmp-rtUpgrade reiserfs-kmp-defaultUpgrade kernel-rt-optionalUpgrade kernel-azure-extraUpgrade kernel-debug-develUpgrade gfs2-kmp-azureUpgrade dtb-rockchipUpgrade kernel-develUpgrade dtb-nvidiaUpgrade dtb-marvellUpgrade ocfs2-kmp-azureUpgrade kernel-rt_debug-develUpgrade kernel-obs-buildUpgrade gfs2-kmp-defaultUpgrade kernel-docsUpgrade dtb-renesasUpgrade kernel-64kb-optionalUpgrade kernel-64kb-extraUpgrade dtb-caviumUpgrade kernel-source-vanillaUpgrade kernel-defaultUpgrade dlm-kmp-defaultUpgrade kernel-rt_debugUpgrade kernel-docs-htmlUpgrade kernel-default-livepatch-develUpgrade kernel-rt-livepatchUpgrade kselftests-kmp-rtUpgrade reiserfs-kmp-rtUpgrade reiserfs-kmp-64kbUpgrade dtb-allwinnerUpgrade kernel-source-rtUpgrade kernel-devel-rtUpgrade kernel-default-optionalUpgrade dtb-hisiliconUpgrade dtb-sprdUpgrade dtb-alteraUpgrade kernel-64kb-develUpgrade cluster-md-kmp-rtUpgrade kselftests-kmp-default | May 15, 2024 | May 1, 2024 |
| Ubuntu | — | Upgrade linux-image-azure-fdeUpgrade linux-image-6.8.0-1008-oracle-64kUpgrade linux-image-nvidiaUpgrade linux-image-virtualUpgrade linux-image-6.8.0-38-generic-64kUpgrade linux-image-gcpUpgrade linux-image-6.8.0-38-genericUpgrade linux-image-6.8.0-38-lowlatencyUpgrade linux-image-lowlatency-64kUpgrade linux-image-6.8.0-1010-azure-fdeUpgrade linux-image-oem-24.04aUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-6.8.0-1010-gcpUpgrade linux-image-generic-64kUpgrade linux-image-intelUpgrade linux-image-oracleUpgrade linux-image-generic-lpaeUpgrade linux-image-6.8.0-1006-gkeUpgrade linux-image-6.8.0-1011-awsUpgrade linux-image-6.8.0-1008-oracleUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-ibm-classicUpgrade linux-image-6.8.0-1008-ibmUpgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-ibmUpgrade linux-image-lowlatencyUpgrade linux-image-6.8.0-1007-intelUpgrade linux-image-genericUpgrade linux-image-6.8.0-1009-nvidiaUpgrade linux-image-oracle-64kUpgrade linux-image-kvmUpgrade linux-image-azureUpgrade linux-image-6.8.0-38-lowlatency-64kUpgrade linux-image-nvidia-64kUpgrade linux-image-oem-24.04Upgrade linux-image-raspiUpgrade linux-image-6.8.0-1009-nvidia-64kUpgrade linux-image-6.8.0-1010-azureUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-gkeUpgrade linux-image-6.8.0-1007-raspiUpgrade linux-image-6.8.0-1008-oemUpgrade linux-image-aws | Jul 12, 2024 | May 1, 2024 |
| Vmware Photon_os | — | Use 'tdnf update' to upgrade all packages to the latest version. | Jan 20, 2025 | May 1, 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