# CVE-2026-43468: net/mlx5: Fix deadlock between devlink lock and esw->wq

Status: published. Published: 2026-05-08. Updated: 2026-11-06.

In the Linux kernel, the following vulnerability has been resolved:

net/mlx5: Fix deadlock between devlink lock and esw->wq

esw->work_queue executes esw_functions_changed_event_handler ->
esw_vfs_changed_event_handler and acquires the devlink lock.

.eswitch_mode_set (acquires devlink lock in devlink_nl_pre_doit) ->
mlx5_devlink_eswitch_mode_set -> mlx5_eswitch_disable_locked ->
mlx5_eswitch_event_handler_unregister -> flush_workqueue deadlocks
when esw_vfs_changed_event_handler executes.

Fix that by no longer flushing the work to avoid the deadlock, and using
a generation counter to keep track of work relevance. This avoids an old
handler manipulating an esw that has undergone one or more mode changes:
- the counter is incremented in mlx5_eswitch_event_handler_unregister.
- the counter is read and passed to the ephemeral mlx5_host_work struct.
- the work handler takes the devlink lock and bails out if the current
  generation is different than the one it was scheduled to operate on.
- mlx5_eswitch_cleanup does the final draining before destroying the wq.

No longer flushing the workqueue has the side effect of maybe no longer
cancelling pending vport_change_handler work items, but that's ok since
those are disabled elsewhere:
- mlx5_eswitch_disable_locked disables the vport eq notifier.
- mlx5_esw_vport_disable disarms the HW EQ notification and marks
  vport->enabled under state_lock to false to prevent pending vport
  handler from doing anything.
- mlx5_eswitch_cleanup destroys the workqueue and makes sure all events
  are disabled/finished.

## Remediation

No remediation reported in collected sources

## Affected products and versions

- Linux / Linux: ≥ f1bc646c9a06f09aad5d8bacb87103b5573ee45e; < 0de867f6e34eae6907b367fd152c55e61cb98608 (affected, git); ≥ f1bc646c9a06f09aad5d8bacb87103b5573ee45e; < 957d2a58f7f8ebcbdd0a85935e0d2675134b890d (affected, git); ≥ f1bc646c9a06f09aad5d8bacb87103b5573ee45e; < 3c7313cb41b1b427078440364d2f042c276a1c0b (affected, git); ≥ f1bc646c9a06f09aad5d8bacb87103b5573ee45e; < 4a7838bebc38374f74baaf88bf2cf8d439a92923 (affected, git); ≥ f1bc646c9a06f09aad5d8bacb87103b5573ee45e; < 90e7e5d14d0bd25ffd019a3aa39d9f1c05fedbe1 (affected, git); ≥ f1bc646c9a06f09aad5d8bacb87103b5573ee45e; < aed763abf0e905b4b8d747d1ba9e172961572f57 (affected, git). Source: CNA: Linux
- Linux / Linux: 6.0 (affected); ≥ 0; < 6.0 (unaffected, semver); ≥ 6.1.167; ≤ 6.1.* (unaffected, semver); ≥ 6.6.130; ≤ 6.6.* (unaffected, semver); ≥ 6.12.78; ≤ 6.12.* (unaffected, semver); ≥ 6.18.19; ≤ 6.18.* (unaffected, semver); ≥ 6.19.9; ≤ 6.19.* (unaffected, semver); ≥ 7.0; ≤ * (unaffected, original_commit_for_fix). Source: CNA: Linux

## Severity and prioritization

- CISA KEV: No listing in collected sources

- EPSS: 0.09% as of 2026-11-06; percentile 0.46%

- SSVC: exploitation none; automatable no; technical impact partial; source ADP: CISA-ADP

- Weaknesses: Not reported

## Exploit evidence

No exploit evidence in collected sources. This is not proof of no exploitation.

## References

- https://git.kernel.org/stable/c/0de867f6e34eae6907b367fd152c55e61cb98608 (CNA: Linux)

- https://git.kernel.org/stable/c/957d2a58f7f8ebcbdd0a85935e0d2675134b890d (CNA: Linux)

- https://git.kernel.org/stable/c/3c7313cb41b1b427078440364d2f042c276a1c0b (CNA: Linux)

- https://git.kernel.org/stable/c/4a7838bebc38374f74baaf88bf2cf8d439a92923 (CNA: Linux)

- https://git.kernel.org/stable/c/90e7e5d14d0bd25ffd019a3aa39d9f1c05fedbe1 (CNA: Linux)

- https://git.kernel.org/stable/c/aed763abf0e905b4b8d747d1ba9e172961572f57 (CNA: Linux)

## Provenance

- CNA: Linux: https://www.cve.org/CVERecord?id=CVE-2026-43468; retrieved 2026-11-06; source updated 2026-11-06

- FIRST EPSS: https://api.first.org/data/v1/epss?cve=CVE-2026-43468; retrieved 2026-11-06; source updated Not reported

Revision: 9f1fc514d094e3d99c895839736d0ea48905c893cb97b3cf3a01441bce2a30eb

Canonical: https://y2.dev/cve/CVE-2026-43468

## Agent and API access

Public CVE pages, Markdown, and JSON are free to read without an account or API key.

- Public catalog: https://y2.dev/cve/index.json. Follow nextCursor with the same search, filters, sort, and limit (1–100). A null cursor marks the end.

- WebMCP: search_cve_disclosures, get_cve_disclosure, get_cve_page_markdown, get_y2_cve_access. Available in compatible browsers.

- Cyber API: https://api.y2.dev/api/v2/cyber/cves and https://api.y2.dev/api/v2/cyber/cves/{cveId}.

- Y2 Pro or Elite: create a workspace API key with the intel:cyber scope and send Authorization: Bearer <Y2_API_KEY>. Setup: https://y2.dev/docs/api/create-key.

- x402: Pay per request without an account or API key. Omit Authorization, read the HTTP 402 PAYMENT-REQUIRED challenge, validate its current requirements, and retry with PAYMENT-SIGNATURE through an authorized payment client. These browser tools never make payments. Guide: https://y2.dev/docs/api/x402.

- OpenAPI: https://y2.dev/api/openapi.yaml. Agent access metadata: https://y2.dev/cve/agent.json.

Collected public records only. Check source status for coverage and freshness.