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