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-rt-debug-kvmUpgrade kernel-coreUpgrade kernel-modules-extraUpgrade kernel-headersUpgrade kernel-develUpgrade kernel-debugUpgrade kernel-zfcpdump-modules-extraUpgrade kernel-debug-coreUpgrade kernel-rt-debug-develUpgrade kernel-zfcpdump-develUpgrade python3-perfUpgrade kernel-rt-coreUpgrade kernel-rt-debug-modules-extraUpgrade kernel-zfcpdumpUpgrade kernel-modulesUpgrade kernelUpgrade kernel-debug-develUpgrade kernel-cross-headersUpgrade kernel-rt-debug-modulesUpgrade kernel-debug-modules-extraUpgrade kernel-tools-libs-develUpgrade perfUpgrade kernel-abi-stablelistsUpgrade bpftoolUpgrade kernel-rt-kvmUpgrade kernel-rt-modulesUpgrade kernel-rt-modules-extraUpgrade kernel-rt-develUpgrade kernel-zfcpdump-coreUpgrade kernel-toolsUpgrade kernel-zfcpdump-modulesUpgrade kernel-rtUpgrade kernel-rt-debug-coreUpgrade kernel-tools-libsUpgrade kernel-rt-debugUpgrade kernel-docUpgrade kernel-debug-modules | Jun 6, 2024 | May 1, 2024 |
| Debian | — | Upgrade linux | May 8, 2024 | May 1, 2024 |
| Huawei Euleros 2_0_sp10 | — | Upgrade kernel-tools-libsUpgrade kernel-abi-stablelistsUpgrade kernelUpgrade python3-perfUpgrade kernel-tools | Jul 16, 2024 | May 1, 2024 |
| Huawei Euleros 2_0_sp11 | — | Upgrade kernel-abi-stablelistsUpgrade kernelUpgrade bpftoolUpgrade kernel-toolsUpgrade kernel-tools-libsUpgrade python3-perf | Oct 8, 2024 | May 1, 2024 |
| Huawei Euleros 2_0_sp12 | — | Upgrade python3-perfUpgrade kernel-abi-stablelistsUpgrade bpftoolUpgrade kernelUpgrade kernel-tools-libsUpgrade kernel-tools | Oct 8, 2024 | May 1, 2024 |
| Huawei Euleros 2_0_sp9 | — | Upgrade kernel-toolsUpgrade kernel-tools-libsUpgrade kernelUpgrade python3-perf | Jul 17, 2024 | May 1, 2024 |
| Oracle_linux | — | Upgrade kernel | Jun 6, 2024 | May 1, 2024 |
| Redhat_linux | — | Upgrade kernel-rtNo solution existsUpgrade kernel | Jun 6, 2024 | May 1, 2024 |
| Rocky_linux | — | Upgrade kernel-modulesUpgrade kernel-debuginfoUpgrade kernel-headersUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-coreUpgrade kernel-debug-coreUpgrade kernel-rt-debug-kvmUpgrade kernel-debugUpgrade kernel-debug-modules-extraUpgrade perf-debuginfoUpgrade kernel-cross-headersUpgrade kernel-tools-debuginfoUpgrade kernel-debug-develUpgrade kernel-debug-debuginfoUpgrade python3-perfUpgrade kernel-rt-debug-modulesUpgrade kernelUpgrade kernel-modules-extraUpgrade kernel-rt-debug-develUpgrade kernel-rt-debug-modules-extraUpgrade kernel-rt-coreUpgrade bpftool-debuginfoUpgrade kernel-rt-debug-coreUpgrade kernel-rtUpgrade kernel-rt-develUpgrade kernel-rt-modules-extraUpgrade kernel-rt-debuginfo-common-x86_64Upgrade kernel-rt-modulesUpgrade python3-perf-debuginfoUpgrade kernel-debug-modulesUpgrade kernel-develUpgrade perfUpgrade kernel-toolsUpgrade kernel-rt-debuginfoUpgrade kernel-rt-debug-debuginfoUpgrade kernel-rt-kvmUpgrade kernel-rt-debugUpgrade bpftoolUpgrade kernel-tools-libs-develUpgrade kernel-tools-libs | Jun 17, 2024 | May 1, 2024 |
| Suse | — | Upgrade ocfs2-kmp-rtUpgrade kernel-rt-livepatch-develUpgrade kernel-default-manUpgrade kernel-kvmsmall-develUpgrade dtb-armUpgrade dtb-exynosUpgrade kernel-default-extraUpgrade dtb-amlogicUpgrade kselftests-kmp-64kbUpgrade kernel-azure-vdsoUpgrade dtb-amazonUpgrade kernel-source-azureUpgrade kernel-macrosUpgrade kernel-azure-develUpgrade kernel-obs-qaUpgrade dlm-kmp-azureUpgrade dtb-mediatekUpgrade kernel-azure-livepatch-develUpgrade kernel-sourceUpgrade kernel-default-base-rebuildUpgrade kernel-default-develUpgrade kernel-rt_debug-vdsoUpgrade kernel-64kbUpgrade kernel-rt-vdsoUpgrade kernel-64kb-livepatch-develUpgrade gfs2-kmp-rtUpgrade kernel-kvmsmall-livepatch-develUpgrade kernel-kvmsmallUpgrade kernel-default-livepatchUpgrade dlm-kmp-64kbUpgrade dtb-freescaleUpgrade cluster-md-kmp-defaultUpgrade dtb-qcomUpgrade kernel-devel-azureUpgrade kernel-syms-rtUpgrade kernel-zfcpdumpUpgrade kernel-kvmsmall-vdsoUpgrade reiserfs-kmp-azureUpgrade kernel-debug-livepatch-develUpgrade kernel-symsUpgrade cluster-md-kmp-azureUpgrade dtb-apmUpgrade gfs2-kmp-64kbUpgrade kernel-azure-optionalUpgrade kernel-syms-azureUpgrade dtb-broadcomUpgrade kernel-azure-baseUpgrade kernel-default-vdsoUpgrade dtb-lgUpgrade kernel-rtUpgrade dlm-kmp-rtUpgrade dtb-socionextUpgrade cluster-md-kmp-rtUpgrade kselftests-kmp-azureUpgrade kernel-rt-livepatchUpgrade kernel-azureUpgrade kernel-rt-extraUpgrade kernel-rt_debug-livepatch-develUpgrade dtb-amdUpgrade dtb-appleUpgrade kernel-azure-extraUpgrade reiserfs-kmp-defaultUpgrade kernel-debugUpgrade kselftests-kmp-defaultUpgrade dtb-nvidiaUpgrade dtb-marvellUpgrade ocfs2-kmp-azureUpgrade gfs2-kmp-defaultUpgrade dtb-hisiliconUpgrade kernel-rt-develUpgrade kernel-64kb-develUpgrade dtb-sprdUpgrade kernel-debug-develUpgrade gfs2-kmp-azureUpgrade dtb-xilinxUpgrade dtb-rockchipUpgrade kernel-obs-buildUpgrade ocfs2-kmp-64kbUpgrade kernel-source-rtUpgrade reiserfs-kmp-rtUpgrade kernel-default-optionalUpgrade kernel-default-livepatch-develUpgrade ocfs2-kmp-defaultUpgrade cluster-md-kmp-64kbUpgrade kernel-debug-vdsoUpgrade kernel-source-vanillaUpgrade kernel-docs-htmlUpgrade kernel-develUpgrade kernel-rt-optionalUpgrade kernel-docsUpgrade kernel-64kb-optionalUpgrade kernel-64kb-extraUpgrade dtb-renesasUpgrade kernel-rt_debug-develUpgrade kernel-rt_debugUpgrade kernel-defaultUpgrade dtb-caviumUpgrade dlm-kmp-defaultUpgrade reiserfs-kmp-64kbUpgrade kselftests-kmp-rtUpgrade kernel-devel-rtUpgrade kernel-default-baseUpgrade dtb-alteraUpgrade dtb-allwinner | May 15, 2024 | May 1, 2024 |
| Ubuntu | — | Upgrade linux-image-6.8.0-1008-oemUpgrade linux-image-kvmUpgrade linux-image-oracle-64kUpgrade linux-image-raspiUpgrade linux-image-6.8.0-38-lowlatency-64kUpgrade linux-image-6.8.0-1007-raspiUpgrade linux-image-awsUpgrade linux-image-6.8.0-1010-azureUpgrade linux-image-azureUpgrade linux-image-oem-24.04Upgrade linux-image-gkeUpgrade linux-image-6.8.0-1009-nvidia-64kUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-nvidia-64kUpgrade linux-image-6.8.0-1009-nvidiaUpgrade linux-image-generic-lpaeUpgrade linux-image-6.8.0-1008-oracle-64kUpgrade linux-image-6.8.0-1011-awsUpgrade linux-image-intelUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-6.8.0-1007-intelUpgrade linux-image-6.8.0-1006-gkeUpgrade linux-image-6.8.0-1010-azure-fdeUpgrade linux-image-6.8.0-38-generic-64kUpgrade linux-image-6.8.0-1008-oracleUpgrade linux-image-6.8.0-1008-ibmUpgrade linux-image-azure-fdeUpgrade linux-image-6.8.0-1010-gcpUpgrade linux-image-generic-64kUpgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-6.8.0-38-genericUpgrade linux-image-virtualUpgrade linux-image-lowlatency-64kUpgrade linux-image-nvidiaUpgrade linux-image-lowlatencyUpgrade linux-image-6.8.0-38-lowlatencyUpgrade linux-image-ibm-classicUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-oem-24.04aUpgrade linux-image-genericUpgrade linux-image-ibmUpgrade linux-image-oracleUpgrade linux-image-gcp | 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