Linux kernel: Improper TCP retransmit queue collapse across encryption boundary
Summary
A flaw in the Linux kernel TCP stack can merge data queued before and after a switch to hardware encryption (device encryption or kernel TLS device offload) during retransmission or SACK processing. Depending on the feature in use, an attacker on the network may obtain data that should have been encrypted in cleartext, or cause affected TLS connections to stall. The issue only applies to systems with these hardware-assisted encryption features in use; the CVSS score is 9.1, but Red Hat rates it Moderate and Ubuntu Medium.
Affected
- Linux kernel from 4.18 up to the fixed stable versions listed below
- Hosts with kernel TLS device offload or PSP configured are relevant
- Affected ranges for 7.3 and later: Unknown.
Fixed in
- 5.10.273
- 5.15.224
- 6.1.191
- 6.6.160
- 6.12.112
- 6.18.55
- 7.2.9
- Fixed versions of distribution kernels: Unknown; check the vendor tracker.
Workaround
- No vendor-documented workaround found.
- Suggestion (not from a source): if kernel TLS device offload or PSP is not required, disable the hardware offload features (tls-hw-tx-offload / tls-hw-rx-offload via ethtool) until the kernel is patched.
Exploitation
- No evidence of exploitation in the wild found.
- No public proof of concept found.
- Red Hat states that exploitation requires an active connection transitioning to hardware encryption while unacknowledged packets remain queued.
Our recommendation
- Inventory hosts for kernel TLS device offload or PSP use (ethtool and kernel configuration).
- Apply the distribution kernel update as soon as it is available and confirm the fixed version in that distribution's tracker.
- On offload-capable hosts that do not need offload, disable it until the patch is installed.
- Re-check CISA KEV and distribution trackers for changes.
Public exploits
PoC-in-GitHub, Metasploit and Exploit-DB list nothing for this CVE.
Research sources
- Linux stable commit 1ae7aee395245874d797890380d9192bd858fb7e git.kernel.org
- Linux stable commit bf785a303e5faad16439c563826a07cb811856c8 git.kernel.org
- Linux stable commit 7061aafc680e14e22b191f178b768886475f8524 git.kernel.org
- Red Hat CVE page CVE-2026-98549 access.redhat.com
- OSV BELL-CVE-2026-98549 (Alpaquita) osv.dev
- Ubuntu CVE tracker CVE-2026-98549 ubuntu.com
- Linux kernel PSP documentation docs.kernel.org
- Strix CVE-2026-98549 www.strix.ai
Researched and written up in English and German by an AI (Claude by Anthropic) based on NVD, CISA, EPSS and the sources listed. The vendor information is authoritative. Researched on 31 Oct 2026, 06:22.
Original description (NVD)
In the Linux kernel, the following vulnerability has been resolved: tcp: prevent collapsing skbs across boundary in rtx queue tcp_write_collapse_fence() sets TCP_SKB_CB(skb)->eor = 1 on tcp_write_queue_tail(sk) to prevent skbs queued after a switch to device encryption from being collapsed into earlier skbs. The fence is a no-op if all earlier data has already been transmitted when the switch happens: sk->sk_write_queue is empty. The not yet acknowledged earlier skbs wait in sk->tcp_rtx_queue with eor 0. On a subsequent retransmit or SACK shift, tcp_retrans_try_collapse() or tcp_shift_skb_data() can then merge an skb queued after the switch into one queued before it. Both users of the fence are affected: - psp: devices only encrypt skbs with skb->decrypted set. The merged skb keeps decrypted = 0 from the earlier skb, so merged data sent after psp_sock_assoc_set_tx() is retransmitted in cleartext. - tls device offload: the merged skb straddles the start marker set in tls_set_device_offload(). The software fallback (fill_sg_in() returns -EINVAL) and the mlx5, nfp and funeth drivers cannot handle such an skb and drop it. Every retransmit rebuilds the same skb, so the connection stalls. Fix this in two places, for defense in depth: 1. Fall back to tcp_rtx_queue_tail(sk) in tcp_write_collapse_fence() when tcp_write_queue_tail(sk) is NULL. 2. Check !skb_cmp_decrypted(to, from) in tcp_skb_can_collapse(), as tcp_skb_can_collapse_rx() does on receive. skb_shift(), which both collapse paths call, already has a DEBUG_NET_WARN_ON_ONCE() for this condition.
NVD references (8)
- https://git.kernel.org/stable/c/08e835f5ec6e261c79d8c39f8618b3af29e3b0da
- https://git.kernel.org/stable/c/1ae7aee395245874d797890380d9192bd858fb7e
- https://git.kernel.org/stable/c/533344a00ad968181e60d0980c076a9d0de57482
- https://git.kernel.org/stable/c/7061aafc680e14e22b191f178b768886475f8524
- https://git.kernel.org/stable/c/7ba87509c54cd519e7ed362e0c85e8431f066a18
- https://git.kernel.org/stable/c/9e2a2f98e8c0197108c6d97a1fa43bfd89071c30
- https://git.kernel.org/stable/c/bf785a303e5faad16439c563826a07cb811856c8
- https://git.kernel.org/stable/c/fc6d80eb504458d6416b75a94188b268c95c6533
Sources
The tracker combines official, freely usable data sources – updated continuously:
- NVD (NIST) – CVEs, rating (CVSS), affected products
- CISA KEV – vulnerabilities confirmed by CISA as actively exploited
- CISA Vulnrichment – CISA assessment (SSVC) in the official CVE record
- FIRST EPSS – probability of exploitation
- Microsoft MSRC – Patch Tuesday: vulnerabilities, severity, updates
- PoC-in-GitHub – public proof-of-concept repositories
- Metasploit (Rapid7) – modules of the Metasploit Framework
- Exploit-DB (OffSec) – archive of public exploits (links only)
- Patch days: official vendor pages (linked per vendor) (Vendor patch days)
This product uses data from the NVD API but is not endorsed or certified by the NVD. EPSS data © FIRST.org.
Affected? We can help.
We check whether your systems are affected, install updates and close the gap – continuously with the System Health Checker if you wish.
