Skip to main content

Linux Kernel CVE-2026-64047

| EUVDEUVD-2026-45620 CRITICAL
Off-by-one Error (CWE-193)
2026-07-19 Linux GHSA-25cm-2563-466g
Critical
Disputed · 9.8 Vendor: Linux
Share

Severity by source

Sources disagree (Medium–Critical)
Vendor (Linux) PRIMARY
9.8 CRITICAL
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
vuln.today AI
5.3 MEDIUM

Local kTLS send path requires an unprivileged socket setup (PR:L, AV:L) and a race-like ring-wrap trigger (AC:H); realistic impact is limited memory leak (C:L) and crash (A:H), not full RCE.

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

vuln.today treats the vendor’s rating as authoritative. A higher third-party CVSS (e.g. CISA-ADP) is shown for transparency but does not drive the headline severity.

CVSS VectorVendor: Linux

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

Lifecycle Timeline

5
Analysis Generated
Jul 20, 2026 - 17:06 vuln.today
CVSS changed
Jul 20, 2026 - 15:22 NVD
9.8 (CRITICAL)
Patch available
Jul 19, 2026 - 17:03 EUVD
CVE Published
Jul 19, 2026 - 15:39 cve.org
CRITICAL 9.8
CVE Published
Jul 19, 2026 - 15:39 cve.org
UNKNOWN (no severity yet)

DescriptionCVE.org

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

net: tls: fix off-by-one in sg_chain entry count for wrapped sk_msg ring

When an sk_msg scatterlist ring wraps (sg.end < sg.start), tls_push_record() chains the tail portion of the ring to the head using sg_chain(). An extra entry in the sg array is reserved for this:

struct sk_msg_sg { [...] /* The extra two elements:

  • 1) used for chaining the front and sections when the list becomes
  • partitioned (e.g. end < start). The crypto APIs require the
  • chaining;
  • 2) to chain tailer SG entries after the message.

*/ struct scatterlist data[MAX_MSG_FRAGS + 2];

The current code uses MAX_SKB_FRAGS + 1 as the ring size:

sg_chain(&msg_pl->sg.data[msg_pl->sg.start], MAX_SKB_FRAGS - msg_pl->sg.start + 1, msg_pl->sg.data);

This places the chain pointer at

sg_chain(data[start], (MAX_SKB_FRAGS - msg_start + 1) .. = &data[start] + (MAX_SKB_FRAGS - msg_start + 1) - 1 = data[start + (MAX_SKB_FRAGS - start + 1) - 1] = data[MAX_SKB_FRAGS]

instead of the true last entry. This is likely due to a "race" of the commit under Fixes landing close to commit 031097d9e079 ("bpf: sk_msg, zap ingress queue on psock down")

Convert to ARRAY_SIZE and drop the data[start] / - start (as suggested by Sabrina).

AnalysisAI

Memory-safety off-by-one in the Linux kernel's TLS (kTLS) data path miscounts scatterlist entries when an sk_msg scatterlist ring wraps (sg.end < sg.start), causing tls_push_record() to place the sg_chain() continuation pointer at data[MAX_SKB_FRAGS] instead of the true last entry. On affected 5.5-through-7.x stable kernels this can corrupt or misdirect the scatterlist handed to the crypto API during TLS record transmission, with the potential for information disclosure (as tagged) or a crash. No public exploit identified at time of analysis; EPSS is low (0.18%, 7th percentile) and the issue is not in CISA KEV.

Technical ContextAI

The bug lives in the kernel TLS transmit path (net/tls, tls_push_record) which builds TLS records from an sk_msg scatterlist ring. sk_msg is the plaintext/ciphertext staging structure shared with the BPF sockmap/sk_msg machinery and defines data[MAX_MSG_FRAGS + 2], reserving two extra scatterlist entries: one to chain the wrapped front and back sections of a partitioned ring (end < start), and one to chain trailer entries. When the ring wraps, the crypto API requires the two segments to be linked with sg_chain(). The defective call computed the entry count as (MAX_SKB_FRAGS - sg.start + 1) starting from &data[start], which resolves the chain-pointer slot to data[MAX_SKB_FRAGS] - one short of the intended terminal slot - so the last legitimate scatterlist entry is overwritten with sg_chain magic instead of being chained. Root cause is a classic off-by-one / incorrect array-bound arithmetic (CWE-193-class, though the record lists CWE as N/A); the fix switches to ARRAY_SIZE(msg_pl->sg.data) and drops the &data[start] / -start terms. The regression is attributed to overlap with commit 031097d9e079 ('bpf: sk_msg, zap ingress queue on psock down').

RemediationAI

Vendor-released patch is available: upgrade to a fixed stable release for your series - 5.10.258, 5.15.209, 6.1.175, 6.6.142, 6.12.92, or 6.18.34, or mainline 7.0.11 / 7.1 (fix commits at https://git.kernel.org/stable/c/73963a375885d5ccb7def39fd0b4f542e0f343dd and the sibling commits listed in the references). Apply the distribution kernel update that references CVE-2026-64047 and reboot. If immediate patching is not possible and kTLS is not required, a targeted compensating control is to avoid/disable kernel TLS offload for TX (keep TLS in userspace libraries) or restrict BPF sockmap/sk_msg usage - trade-off: this removes kTLS throughput benefits and may break applications that rely on setsockopt(SOL_TLS). Where kTLS is business-critical, prioritize the kernel upgrade instead, as no configuration toggle fully removes the code path while kTLS is in use.

Vendor StatusVendor

SUSE

Severity: Critical
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Affected
SUSE Linux Enterprise Desktop 15 SP7 Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Affected
SUSE Linux Enterprise High Availability Extension 16.0 Affected

Share

CVE-2026-64047 vulnerability details – vuln.today

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