CVE-2026-43012
Medium · 5.5CVSS
5.5
EPSS
0.1%
Published
May 1, 2026
CISA due date
—
Cloudanix analysis
A local user with network administration rights can crash certain Linux systems using Mellanox networking hardware by triggering a failed network mode change.
- Exploitation
- Local Privilege
- Attacker needs
- Low Privilege
- Complexity
- Moderate
- Impact
- Denial Of Service
- Component
- OS kernel
- Class
- Denial of service
- Remediation
- Patch
- Effort
- Medium
- Patch risk
- Medium
What it actually does
This flaw is a local denial-of-service condition in the Linux kernel Mellanox mlx5 network driver switchdev/e-switch handling path. When a privileged or partially privileged local user requests a devlink transition into switchdev mode and that transition fails internally, the driver incorrectly rolls back to legacy mode without setting the rollback state that prevents unregistering the uplink netdevice. The bad rollback path can leave the uplink representor unregistered and trigger a kernel BUG in net/core/dev.c during netdevice unregister handling, causing a kernel oops/panic or loss of networking availability depending on kernel panic policy and runtime configuration. The issue affects systems using mlx5-capable Mellanox/NVIDIA ConnectX-class hardware and the Linux mlx5 driver with devlink e-switch mode operations; it is not a remote code execution or data disclosure vulnerability.
Why it matters to the business
Exploitation can crash or destabilize affected Linux hosts that use mlx5 networking features, causing workload interruption, node loss, failed network connectivity, or service failover events. The practical risk is highest for virtualization, container, NFV, SDN, and high-performance compute environments that expose devlink or SR-IOV/switchdev administration to local operators or automation. The CVSS score is moderate, EPSS is very low and stable, it is not listed in CISA KEV, and no exploit maturity is reported, so broad opportunistic exploitation is unlikely; however, the operational impact can still be severe on systems where a local user, compromised process, or misbehaving automation can change mlx5 e-switch mode.
How an attack unfolds
An attacker first needs local access with enough privileges to send devlink generic netlink requests that modify the mlx5 e-switch mode, typically requiring root or capabilities such as CAP_NET_ADMIN in the relevant namespace. The attacker identifies an mlx5-backed PCI device and invokes a devlink operation to set the e-switch mode to switchdev. If the switchdev enablement path fails because of device state, unsupported capabilities, firmware response, or another internal error, vulnerable kernels enter the rollback path. Because the driver fails to mark rollback as legacy mode before unloading the uplink representor, the rollback attempts to unregister a netdevice that is already in an inconsistent state. This triggers a kernel BUG in unregister_netdevice_many_notify(), resulting in a kernel oops or panic and denying service on the affected host. Exploitation is local, does not require user interaction, and primarily impacts availability.
How to fix it
Upgrade to a Linux kernel version that includes the upstream mlx5 fix for switchdev mode rollback. Because no exact fixed package versions were provided, use the fixed kernel builds published by the relevant Linux distribution, appliance vendor, cloud image provider, or kernel maintainer, and verify that the patch for "net/mlx5: Fix switchdev mode rollback in case of failure" is included. Prioritize systems with Mellanox/NVIDIA mlx5 hardware, SR-IOV, switchdev, devlink, Open vSwitch offload, Kubernetes/virtualization networking, or NFV workloads. If immediate patching is not possible, restrict devlink and network administration privileges, remove unnecessary CAP_NET_ADMIN from containers and services, limit root access, disable or avoid switchdev mode transitions where operationally feasible, and ensure host reboot/failover procedures are tested. Consider temporarily keeping affected adapters in a stable legacy mode until patched if switchdev is not required.
How to confirm the fix worked
Confirm exposure by checking whether the system runs an affected Linux kernel with the mlx5_core driver loaded and has mlx5 PCI devices managed through devlink. Commands commonly used for validation include checking kernel package/changelog entries for the named mlx5 rollback fix, reviewing `uname -r`, confirming loaded modules with `lsmod | grep mlx5`, and listing devices with `devlink dev show`. Confirm remediation by verifying the installed kernel package contains the vendor fix and by rebooting into the fixed kernel. On non-production test systems only, validate that failed switchdev transitions no longer produce a kernel BUG or unregister-related oops; do not intentionally trigger this on production systems. Also verify that untrusted users, containers, and services do not retain CAP_NET_ADMIN or access to host devlink operations unless required.
Typical attack path
- Gain local shell, container escape context, administrative automation access, or another local execution path on a Linux system using the mlx5 kernel driver.
- Obtain sufficient privileges to perform devlink e-switch configuration changes, commonly root or CAP_NET_ADMIN.
- Enumerate devlink devices and identify an mlx5 PCI device with e-switch support.
- Issue a devlink request to switch the device into switchdev mode.
- Cause or rely on an internal switchdev enablement failure, such as unsupported capability, incompatible device state, or firmware command failure.
- Trigger the vulnerable rollback path that unloads the uplink representor incorrectly.
- Crash the kernel or destabilize networking through a kernel BUG/oops, causing denial of service.
How to detect it
To determine whether this was already exploited or triggered, review kernel logs and persistent journal data for devlink-initiated mlx5 e-switch mode changes followed by mlx5 command failures, uplink representor unloads, and a kernel BUG/oops in the netdevice unregister path. Relevant sources include `journalctl -k`, `/var/log/kern.log`, `/var/log/messages`, `/var/log/syslog`, crash dump tooling such as kdump/vmcore, console logs, hypervisor out-of-band logs, and EDR telemetry for devlink command execution. Look for process context showing `Comm: devlink`, generic netlink/devlink calls, `mlx5_devlink_eswitch_mode_set`, `devlink_nl_eswitch_set_doit`, and stack traces ending in `unregister_netdevice_many_notify`, `unregister_netdev`, or `mlx5e_vport_rep_unload`. Correlate these events with local user sessions, sudo logs, container runtime events, orchestration jobs, and network automation runs that executed `devlink dev eswitch set ... mode switchdev`. Because the vulnerability is a crash/availability issue, evidence may be limited after reboot unless persistent kernel logging or crash dumps are enabled.
- Comm: devlink
- kernel BUG at net/core/dev.c
- unregister_netdevice_many_notify
- unregister_netdevice_queue
- unregister_netdev
- mlx5e_vport_rep_unload
- esw_offloads_enable
- mlx5_eswitch_enable_locked
- mlx5_devlink_eswitch_mode_set
- devlink_nl_eswitch_set_doit
- mlx5_core
- E-Switch: Disable: mode(LEGACY)
- Loading uplink representor for vport 65535
- Unloading uplink representor for vport 65535
- mlx5_cmd_out_err
- QUERY_HCA_CAP(0x100)
- status bad parameter(0x3)
- syndrome (0x3a3846)
- enp0s3np0 (unregistered)
- Oops: invalid opcode
- devlink dev eswitch set
- mode switchdev
What your security team should do
- Inventory Linux systems using Mellanox/NVIDIA mlx5 adapters, SR-IOV, switchdev, or devlink-managed networking and prioritize them for kernel updates.
- Apply vendor-provided fixed kernel packages or kernel live patches where available; reboot into the fixed kernel where required.
- Restrict devlink and e-switch mode changes to trusted administrative workflows only; remove unnecessary CAP_NET_ADMIN from containers and services.
- Review automation that changes mlx5 e-switch mode and pause risky switchdev transitions until affected hosts are patched.
- Monitor kernel logs for mlx5 switchdev rollback failures, uplink representor unloads, and kernel BUG/oops events involving unregister_netdevice_many_notify.
- Ensure high-availability, node drain, and failover procedures are ready for hosts that cannot be patched immediately.
- Track distribution advisories for exact fixed kernel versions because no universal fixed version was provided in the input.
The record
In the Linux kernel, the following vulnerability has been resolved: net/mlx5: Fix switchdev mode rollback in case of failure If for some internal reason switchdev mode fails, we rollback to legacy mode, before this patch, rollback will unregister the uplink netdev and leave it unregistered causing the below kernel bug. To fix this, we need to avoid netdev unregister by setting the proper rollback flag 'MLX5_PRIV_FLAGS_SWITCH_LEGACY' to indicate legacy mode. devlink (431) used greatest stack depth: 11048 bytes left mlx5_core 0000:00:03.0: E-Switch: Disable: mode(LEGACY), nvfs(0), \ necvfs(0), active vports(0) mlx5_core 0000:00:03.0: E-Switch: Supported tc chains and prios offload mlx5_core 0000:00:03.0: Loading uplink representor for vport 65535 mlx5_core 0000:00:03.0: mlx5_cmd_out_err:816:(pid 456): \ QUERY_HCA_CAP(0x100) op_mod(0x0) failed, \ status bad parameter(0x3), syndrome (0x3a3846), err(-22) mlx5_core 0000:00:03.0 enp0s3np0 (unregistered): Unloading uplink \ representor for vport 65535 ------------[ cut here ]------------ kernel BUG at net/core/dev.c:12070! Oops: invalid opcode: 0000 [#1] SMP NOPTI CPU: 2 UID: 0 PID: 456 Comm: devlink Not tainted 6.16.0-rc3+ \ #9 PREEMPT(voluntary) RIP: 0010:unregister_netdevice_many_notify+0x123/0xae0 ... Call Trace: [ 90.923094] unregister_netdevice_queue+0xad/0xf0 [ 90.923323] unregister_netdev+0x1c/0x40 [ 90.923522] mlx5e_vport_rep_unload+0x61/0xc6 [ 90.923736] esw_offloads_enable+0x8e6/0x920 [ 90.923947] mlx5_eswitch_enable_locked+0x349/0x430 [ 90.924182] ? is_mp_supported+0x57/0xb0 [ 90.924376] mlx5_devlink_eswitch_mode_set+0x167/0x350 [ 90.924628] devlink_nl_eswitch_set_doit+0x6f/0xf0 [ 90.924862] genl_family_rcv_msg_doit+0xe8/0x140 [ 90.925088] genl_rcv_msg+0x18b/0x290 [ 90.925269] ? __pfx_devlink_nl_pre_doit+0x10/0x10 [ 90.925506] ? __pfx_devlink_nl_eswitch_set_doit+0x10/0x10 [ 90.925766] ? __pfx_devlink_nl_post_doit+0x10/0x10 [ 90.926001] ? __pfx_genl_rcv_msg+0x10/0x10 [ 90.926206] netlink_rcv_skb+0x52/0x100 [ 90.926393] genl_rcv+0x28/0x40 [ 90.926557] netlink_unicast+0x27d/0x3d0 [ 90.926749] netlink_sendmsg+0x1f7/0x430 [ 90.926942] __sys_sendto+0x213/0x220 [ 90.927127] ? __sys_recvmsg+0x6a/0xd0 [ 90.927312] __x64_sys_sendto+0x24/0x30 [ 90.927504] do_syscall_64+0x50/0x1c0 [ 90.927687] entry_SYSCALL_64_after_hwframe+0x76/0x7e [ 90.927929] RIP: 0033:0x7f7d0363e047
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|