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