Skip to main content

Linux Kernel EUVDEUVD-2026-86703

| CVE-2026-98050 HIGH
Race Condition (CWE-362)
2026-09-25 Linux GHSA-g63f-gg2v-x4xj
7.5
CVSS 3.1 · Vendor: Linux
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Gain local CAP_NET_ADMIN on mlxsw host
  2. Delivery
    Enable PTP / run ptp4l
  3. Exploit
    Port reaches UNCALIBRATED/SLAVE, tx-timestamp times out
  4. Execution
    GC reaps unmatched SKB, calls napi_gro_receive
  5. Persist
    Concurrent NAPI poll mutates same GRO list
  6. Impact
    Kernel panic (DoS)

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V15 - Secure Coding and Architecture Concurrency control, locking
MITRE ATT&CK

1 technique across 1 tactic: Privilege Escalation

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires the Mellanox Spectrum (mlxsw) switch/NIC driver with PTP hardware timestamping in use - specifically the mlxsw_sp1 PTP path - and PTP actively running (e.g. ptp4l), which needs CAP_NET_ADMIN to configure. The panic requires a timing race: an unmatched PTP entry carrying an SKB must be reaped by the PTP garbage-collection workqueue (triggered by a tx-timestamp timeout, reproducible when a port transitions to UNCALIBRATED/SLAVE) at the same time the threaded NAPI poll (enabled unconditionally via netif_threaded_enable) is servicing the RX queue on a different CPU. Limiting factors: physical Mellanox Spectrum hardware, PTP configured, privileged configuration access, and a genuine concurrency window (AC:H) - it is not a reliable on-demand remote trigger. Systems not using PTP on mlxsw are unaffected.

Impact

The published CVSS 7.5 (CVSS:3.1/AV:A/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H) overstates real-world risk. The description is unambiguous that this is a concurrency bug: mlxsw_sp1_ptp_ht_gc_collect() calls napi_gro_receive() from the PTP garbage-collection workqueue while the threaded NAPI poll may run the same GRO list on another CPU, producing 'list_add corruption' and a fatal kernel BUG/panic. That is a denial-of-service (crash) outcome - there is no confidentiality or code-execution component, so the C:H/I:H in the NVD vector is not supported by the text. AV:A (adjacent network) is also questionable: the trigger is a locally-configured PTP timeout (ptp4l reaching UNCALIBRATED/SLAVE) racing the local NAPI poll, i.e. a host-local condition, not a packet an adjacent attacker crafts. PR:N is misleading because configuring PTP timestamping requires CAP_NET_ADMIN. No EPSS score, no CISA KEV listing, and no public exploit are provided. SSVC-style read: exploitation = none observed; automatable = no (it is a timing race, not a scriptable remote trigger); technical impact = partial/DoS. Net: a legitimate crash bug affecting only Mellanox Spectrum switch/NIC deployments running PTP - low priority for the general fleet, patch on the normal kernel-update cadence. Note the conflict explicitly: NVD marks C:H/I:H/A:H and AV:A, but the description describes a local, config-and-race-gated kernel panic with no data-exposure vector - verify impact scoping with the kernel advisory.

Exploit ScenarioDerived

On a Mellanox Spectrum switch running the mlxsw driver with PTP enabled, an operator (or a local process with CAP_NET_ADMIN) runs ptp4l; when a port reaches UNCALIBRATED/SLAVE a tx-timestamp timeout leaves an unmatched PTP entry. When the PTP garbage collector reaps that entry and calls napi_gro_receive() while the threaded NAPI poll is simultaneously servicing the RX queue on another CPU, both mutate the GRO list, corrupting it and panicking the kernel. No public exploit code exists; the description notes the panic is easily reproducible under normal ptp4l operation, so it can also fire accidentally.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 25, 2026

A concurrency flaw in the Linux kernel's mlxsw Spectrum PTP driver (spectrum_ptp) can panic the kernel when a stale PTP entry is reaped by the garbage-collection workqueue at the same moment the threaded NAPI poll is running on another CPU. The GC path calls mlxsw_sp1_ptp_unmatched_finish() → mlxsw_sp1_ptp_packet_finish() → mlxsw_sp_rx_listener_no_mark_func(), which ends in napi_gro_receive() using a NAPI pointer captured earlier in the RX context; because mlxsw_pci_napi_devs_init() unconditionally calls netif_threaded_enable(), that poll runs as an independently scheduled kthread that local_bh_disable() on the GC CPU cannot protect against, so both CPUs mutate the same GRO list and hit list_add corruption / 'kernel BUG at lib/list_debug.c'. Exploitation is not remotely trivial: it requires physical Mellanox Spectrum hardware running the mlxsw driver, PTP hardware timestamping configured and active (e.g. ptp4l) with privileged CAP_NET_ADMIN access, plus a genuine timing race (AC:H) - the reported trigger is a tx-timestamp timeout while a port transitions to UNCALIBRATED/SLAVE. No public exploit code or in-the-wild activity has been identified at time of analysis, and our independent assessment rates the published CVSS 7.5 (AV:A/PR:N) as an overstatement, scoring the issue as a locally triggered, privilege-gated denial-of-service/kernel-panic (CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:H).

RemediationAI

Vendor-released patch: Linux 6.18.53, 7.2.7 and 7.3-rc3 (fix commits 7ddcc460176eb34f9bc5bda3cc274d0d24dc62a9, 4375b3d1c2898886df1f908160c7004bdd938e73 and 2ac174dfcdde399fa95ba889541fb5e688d8bb35 at https://git.kernel.org/stable/c/7ddcc460176eb34f9bc5bda3cc274d0d24dc62a9, https://git.kernel.org/stable/c/4375b3d1c2898886df1f908160c7004bdd938e73, https://git.kernel.org/stable/c/2ac174dfcdde399fa95ba889541fb5e688d8bb35, see also https://nvd.nist.gov/vuln/detail/CVE-2026-98050); apply the stable update for your branch or backport the patch, which switches the PTP ingress finish path from napi_gro_receive() to netif_receive_skb() and thereby removes the cross-CPU GRO list race while preserving RX stats and skb->dev assignment. Until patched, the practical mitigation is to not run PTP over mlxsw ports on affected kernels - disable PTP hardware timestamping / stop ptp4l-style daemons or blacklist the mlxsw_spectrum module (mlxsw_core/mlxsw_pci depend on it) - with the trade-off that you lose the switch/NIC entirely or lose IEEE 1588 synchronization. Disabling threaded NAPI (netif_threaded_disable / not enabling threaded RX) would also close the race window, but mlxsw enables it unconditionally in mlxsw_pci_napi_devs_init() and changing that is not a supported configuration knob, so it is not a dependable control. Because triggering requires CAP_NET_ADMIN to configure PTP plus physical Mellanox Spectrum hardware, restricting PTP configuration to trusted administrators and avoiding tx-timestamp-timeout scenarios (e.g. not letting ports churn into UNCALIBRATED/SLAVE state) meaningfully reduces exposure; these are compensating measures, not substitutes for the vendor patch.

Affected VersionsENISA

Linux patch: 0
Linux 1ba06ca96ca255c079ce5ea6a75cc0bfd5e97921 <7ddcc460176eb34f9bc5bda3cc274d0d24dc62a9
Linux 6.14
Linux patch: 7.2.7
Linux patch: 7.3-rc3
Linux 1ba06ca96ca255c079ce5ea6a75cc0bfd5e97921 <4375b3d1c2898886df1f908160c7004bdd938e73
Linux 1ba06ca96ca255c079ce5ea6a75cc0bfd5e97921 <2ac174dfcdde399fa95ba889541fb5e688d8bb35
Linux patch: 6.18.53

Affected Packages

euvd linux no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The affected code is the PTP (IEEE 1588) hardware-timestamping support in the Mellanox Spectrum switch ASIC driver, mlxsw_spectrum (module mlxsw_spectrum with mlxsw_core and mlxsw_pci), which is loaded for Mellanox Spectrum-family NICs/switches with PTP offload. The driver tracks unmatched PTP packets in a hash table and reaps stale entries from a PTP garbage-collection workqueue after MLXSW_SP1_PTP_HT_GC_TIMEOUT; mlxsw_sp1_ptp_ht_gc_collect() calls mlxsw_sp1_ptp_unmatched_finish() → mlxsw_sp1_ptp_packet_finish(), and for ingress packets mlxsw_sp_rx_listener_no_mark_func() finishes with eth_type_trans() plus napi_gro_receive(napi, skb), reusing a NAPI pointer stashed in the SKB control block when the packet was trapped in NAPI context. GRO list manipulation (gro_receive_skb) is only safe inside that NAPI instance's own poll; mlxsw_pci_napi_devs_init() unconditionally enables threaded NAPI via netif_threaded_enable(), so the poll executes as a kthread that may run on a different CPU, and the local_bh_disable() in the GC path only suppresses softirqs on the local CPU - its accompanying comment that mlxsw_sp1_ptp_unmatched_finish() calls netif_receive_skb() was stale since an earlier commit. The crash signature is list_add corruption in lib/list_debug.c:29 followed by 'Oops: invalid opcode' and 'Kernel panic - not syncing: Fatal exception in interrupt', with the trace gro_receive_skb → mlxsw_sp1_ptp_got_packet → mlxsw_core_skb_receive → mlxsw_pci_napi_poll_cq_rx → __napi_poll → napi_threaded_poll_loop. No CWE identifier is assigned in the source data; the root-cause class is a cross-CPU data race on shared NAPI/GRO state. The fix introduces an ingress-delivery helper for the PTP packet_finish() path that calls netif_receive_skb() instead of napi_gro_receive(); netif_receive_skb() is safe outside the owning NAPI poll context, with RX stats accounting and skb->dev assignment preserved. CPE data identifies the affected component as linux:linux (Linux kernel) across upstream and stable branches; affected lines per EUVD include 6.14-based code and the 6.18.x series up to the fixed 6.18.53, with fixes also landing in 7.2.7 and 7.3-rc3.

Know when the next one hits your stack

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (Linux) PRIMARY 7.5 HIGH
AV:A/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 5.3 MEDIUM

Host-local PTP config + concurrency race (AV:L/AC:H), needs CAP_NET_ADMIN to enable PTP (PR:L); outcome is a kernel panic (A:H) with list corruption (I:L) and no disclosure (C:N).

3.1 AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:H
4.0 AV:L/AC:H/AT:P/PR:L/UI:N/VC:N/VI:L/VA:H/SC:N/SI:N/SA:N
SUSE 5.3 MEDIUM
AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:H
Red Hat 7.0 MEDIUM

Primary rating from Vendor (Linux).

CVSS VectorVendor: Linux

Attack Vector
Adjacent
Attack Complexity
High
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

4
CVSS changed
Sep 25, 2026 - 15:22 NVD
7.5 (HIGH)
Patch available
Sep 25, 2026 - 11:02 EUVD
CVE Published
Sep 25, 2026 - 10:23 cve.org
HIGH 7.5
CVE Published
Sep 25, 2026 - 10:23 cve.org
UNKNOWN (no severity yet)

DescriptionCVE.org

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

mlxsw: spectrum_ptp: Fix napi_gro_receive() call from GC workqueue context

Currently mlxsw_sp1_ptp_ht_gc_collect() is run from the PTP garbage-collection workqueue, rather than the NAPI poll context. For any unmatched PTP entries carrying an SKB, it calls mlxsw_sp1_ptp_unmatched_finish() -> mlxsw_sp1_ptp_packet_finish(). For ingress packets, this calls mlxsw_sp_rx_listener_no_mark_func(). The end of that function is the following:

skb->protocol = eth_type_trans(skb, skb->dev); napi_gro_receive(mlxsw_skb_cb(skb)->rx_md_info.napi, skb);

The napi pointer is one that was placed in the SKB control block when the trapped packet was received in the NAPI context. Later, when the GC reaps the unmatched entry (up to MLXSW_SP1_PTP_HT_GC_TIMEOUT later), the call to napi_gro_receive() mutates the NAPI instance's GRO list, which is unsafe if the poll is running concurrently on another CPU.

In mlxsw_sp1_ptp_ht_gc_collect(), local_bh_disable() is called to prevent softirq processing, but this only applies to the local CPU. Additionally, its comment is stale. It states that mlxsw_sp1_ptp_unmatched_finish() invokes netif_receive_skb(). This has not been accurate since the referenced commit; this patch makes that comment accurate again. mlxsw_pci_napi_devs_init() calls netif_threaded_enable() on the NAPI RX net_device without any conditions. The NAPI instance's poll, which may be running concurrent to the GC, is running as an independently-scheduled kthread which may be on a different CPU. The call to local_bh_disable() does not guard against this.

If a tx-timestamp timeout produces an unmatched entry (which can be easily reproduced by running ptp4l and waiting for a port to reach the UNCALIBRATED/SLAVE state) while the owning NAPI thread is in the middle of a poll on another CPU, both sides mutate the GRO list concurrently, as shown below:

[39.846] port 1 (swp1): MASTER to UNCALIBRATED on RS_SLAVE list_add corruption. next->prev should be prev (ffff8d620faf4138), but was ffff8d624150f700. (next=ffff8d620faf4138). kernel BUG at lib/list_debug.c:29! Oops: invalid opcode: 0000 [#1] SMP PTI CPU: 1 UID: 0 PID: 539 Comm: napi/mlxsw_rx-0 Not tainted 6.18.48 #1-NixOS PREEMPT(lazy) Hardware name: Mellanox Technologies Ltd. MSN2410/VMOD0001, BIOS 4.6.5 09/13/2018 RIP: 0010:__list_add_valid_or_report+0x79/0xb0 RSP: 0018:ffffcdf8c0f27c08 EFLAGS: 00010246 RAX: 0000000000000075 RBX: ffff8d624150fd00 RCX: 0000000000000000 RDX: 0000000000000000 RSI: 0000000000000001 RDI: ffff8d6315d1e540 RBP: ffff8d620faf4070 R08: 0000000000000000 R09: 00000000ffffdfff R10: ffffffffa5c60fe0 R11: ffffcdf8c0f27ab8 R12: 0000000000000003 R13: 000000000000003d R14: 00000000000001bc R15: 0000000000000001 FS: 0000000000000000(0000) GS:ffff8d636f63f000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000562689a60c24 CR3: 000000015f224004 CR4: 00000000001726f0 Call Trace: <TASK> gro_receive_skb+0xee/0x230 mlxsw_sp1_ptp_got_packet+0x61/0x140 [mlxsw_spectrum] mlxsw_core_skb_receive+0xdf/0x1b0 [mlxsw_core] mlxsw_pci_napi_poll_cq_rx+0x780/0x9d0 [mlxsw_pci] __napi_poll+0x31/0x1e0 napi_threaded_poll_loop+0x16b/0x1c0 napi_threaded_poll+0x71/0xa0 kthread+0xfb/0x260 ret_from_fork+0x22d/0x260 ret_from_fork_asm+0x1a/0x30 </TASK> Kernel panic - not syncing: Fatal exception in interrupt

The machinery that leads to this kernel panic has not been changed between 6.18.48 and mainline.

This patch adds an ingress-delivery helper for the PTP packet_finish() path that calls netif_receive_skb() instead of napi_gro_receive(). netif_receive_skb(), unlike napi_gro_receive(), can be called from outside of the NAPI instance's poll context, which can occur at the call site for this path. RX stats accounting and the skb->dev assignment are still preserved; the only change is the delivery call itself.

This removes GR ---truncated---

Executive ViewAI

Why It Matters

A concurrency defect in the Linux kernel's mlxsw driver for Mellanox Spectrum network adapters can crash the host kernel (panic) when PTP hardware timestamping is active and a garbage-collection event races with packet processing on another CPU. Only systems equipped with this specific Mellanox Spectrum hardware and running PTP time synchronization are exposed, but for those systems the result is a full host outage rather than degraded performance. Leadership should care because affected hosts are typically time-sensitive infrastructure - trading, telecom, industrial, or broadcast environments - where an unexpected reboot can disrupt service continuity.

Business Impact: Medium
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.2%
Top 88% exploitable
Prevalence
Low
Mellanox Spectrum switch/NIC ASIC driver with PTP - datacenter-only niche hardware
Data Quality
4 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Controlled
Automatable· derived
No
Human Impact
Medium

Priority Score

38
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +38
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Race conditions occur when multiple concurrent requests exploit the brief time gap between checking a condition and acting upon it (TOCTOU - Time of Check, Time of Use).

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Not-Affected
SUSE Linux Enterprise Desktop 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 16.0 Not-Affected

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy