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

veth: fix skb length accounting after XDP frag adjustment

veth exposes non-linear skb fragments through an xdp_buff. If an XDP
program adjusts the fragment area, veth_xdp_rcv_skb() copies
xdp_frags_size back to skb->data_len but leaves skb->len containing the
old fragment contribution.

After a fragment shrink, this makes skb_headlen() larger than the actual
linear area. In the reproduced UDP receive path, __skb_datagram_iter()
copied 1024 bytes past the actual linear tail to userspace, starting at
struct skb_shared_info. The copied bytes included the affected skb's
nr_frags, xdp_frags_size, and a kernel pointer from
skb_shinfo(skb)->frags[0]. Real packet data was displaced by the same
amount and truncated at the end.

Subtract the old data_len before replacing it and add the new data_len
afterwards, keeping skb->len and skb->data_len synchronized.

Additionally, bpf_xdp_pull_data() can advance data_end while leaving
frags present. The skb is then still non-linear, so the old
__skb_put(skb, off) triggers SKB_LINEAR_ASSERT().

Use skb_set_tail_pointer() and update skb->len explicitly instead,
following bpf_prog_run_generic_xdp(). Unlike __skb_put(),
skb_set_tail_pointer() does not require a linear skb.

A 60000-byte UDP datagram on a veth pair with MTU 64000 was shortened by
1024 bytes from its fragment area. Before the fix, all 10 runs produced
corrupted payloads. After the fix, all 10 runs matched the expected
payload exactly. A forced-tailroom reproducer also exercises
bpf_xdp_pull_data() with frags still present; the old code triggers
SKB_LINEAR_ASSERT(), while this fix passes 10/10 runs.
Published: 2026-08-22
Score: 10 Critical
EPSS: < 1% Very Low
KEV: No
Impact: Information Disclosure and Denial of Service
Action: Patch Kernel
AI Analysis

Impact

The Linux kernel’s veth driver incorrectly updates the skb length on XDP fragment modifications. When an XDP program shrinks the fragment area, the driver copies the new fragment size into skb->data_len but leaves skb->len unchanged, causing skb_headlen() to report a linear size larger than the actual linear data. During a UDP receive path, __skb_datagram_iter copied 1024 bytes past the true linear tail into user space, exposing kernel pointers and other packet metadata while truncating the real payload. The old code also triggered a SKB_LINEAR_ASSERT when bpf_xdp_pull_data() advanced data_end with fragments still present, potentially causing a kernel crash.

Affected Systems

Affected systems include any Linux kernel configuration that exposes the veth driver, irrespective of distribution, for kernel releases built before the fix was applied. The issue is tied to usage of XDP programs that manipulate fragment areas on veth interfaces. No specific version string is provided, but all builds lacking the patch are impacted.

Risk and Exploitability

The CVSS score of 10 indicates critical severity, while the EPSS score of <1% suggests a very low likelihood of exploitation. The vulnerability is not listed in the CISA KEV catalog. Exploitation requires the ability to load or modify an XDP program on a veth interface, typically requiring CAP_SYS_ADMIN or equivalent eBPF execution rights. Once the flaw is triggered, a local attacker can read kernel memory beyond the packet buffer, leaking pointers and metadata, or cause a kernel crash via SKB_LINEAR_ASSERT, leading to denial of service. The typo in skb length bookkeeping is an out‑of‑bounds read that directly satisfies a CWE‑125 characterization.

Generated by OpenCVE AI on August 25, 2026 at 10:07 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Apply the latest Linux kernel update that incorporates the veth skb length accounting fix
  • Avoid using XDP programs that adjust fragment areas on veth devices; if necessary, modify them to keep skb linear and preserve skb->len
  • If a kernel update cannot be performed immediately, disable XDP on veth interfaces or drop veth usage while monitoring kernel logs for SKB_LINEAR_ASSERT messages

Generated by OpenCVE AI on August 25, 2026 at 10:07 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Debian DLA Debian DLA DLA-4777-1 linux security update
Debian DSA Debian DSA DSA-6466-1 linux security update
History

Tue, 25 Aug 2026 12:15:00 +0000


Tue, 25 Aug 2026 10:30:00 +0000

Type Values Removed Values Added
Weaknesses CWE-125
CWE-200

Tue, 25 Aug 2026 08:15:00 +0000

Type Values Removed Values Added
Weaknesses CWE-125
CWE-200

Tue, 25 Aug 2026 05:45:00 +0000

Type Values Removed Values Added
Metrics cvssV3_1

{'score': 10, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H'}


Sun, 23 Aug 2026 13:15:00 +0000


Sat, 22 Aug 2026 19:30:00 +0000

Type Values Removed Values Added
Weaknesses CWE-125
CWE-200

Sat, 22 Aug 2026 15:45:00 +0000

Type Values Removed Values Added
Description In the Linux kernel, the following vulnerability has been resolved: veth: fix skb length accounting after XDP frag adjustment veth exposes non-linear skb fragments through an xdp_buff. If an XDP program adjusts the fragment area, veth_xdp_rcv_skb() copies xdp_frags_size back to skb->data_len but leaves skb->len containing the old fragment contribution. After a fragment shrink, this makes skb_headlen() larger than the actual linear area. In the reproduced UDP receive path, __skb_datagram_iter() copied 1024 bytes past the actual linear tail to userspace, starting at struct skb_shared_info. The copied bytes included the affected skb's nr_frags, xdp_frags_size, and a kernel pointer from skb_shinfo(skb)->frags[0]. Real packet data was displaced by the same amount and truncated at the end. Subtract the old data_len before replacing it and add the new data_len afterwards, keeping skb->len and skb->data_len synchronized. Additionally, bpf_xdp_pull_data() can advance data_end while leaving frags present. The skb is then still non-linear, so the old __skb_put(skb, off) triggers SKB_LINEAR_ASSERT(). Use skb_set_tail_pointer() and update skb->len explicitly instead, following bpf_prog_run_generic_xdp(). Unlike __skb_put(), skb_set_tail_pointer() does not require a linear skb. A 60000-byte UDP datagram on a veth pair with MTU 64000 was shortened by 1024 bytes from its fragment area. Before the fix, all 10 runs produced corrupted payloads. After the fix, all 10 runs matched the expected payload exactly. A forced-tailroom reproducer also exercises bpf_xdp_pull_data() with frags still present; the old code triggers SKB_LINEAR_ASSERT(), while this fix passes 10/10 runs.
Title veth: fix skb length accounting after XDP frag adjustment
First Time appeared Linux
Linux linux Kernel
CPEs cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
Vendors & Products Linux
Linux linux Kernel
References

Subscriptions

Linux Linux Kernel
cve-icon MITRE

Status: PUBLISHED

Assigner: Linux

Published:

Updated: 2026-08-25T05:40:38.488Z

Reserved: 2026-08-15T05:44:03.920Z

Link: CVE-2026-74612

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-08-22T16:16:33.770

Modified: 2026-08-25T06:18:38.680

Link: CVE-2026-74612

cve-icon Redhat

Severity : Moderate

Publid Date: 2026-08-22T00:00:00Z

Links: CVE-2026-74612 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-08-25T10:15:04Z

Weaknesses
  • CWE-125

    Out-of-bounds Read

  • CWE-200

    Exposure of Sensitive Information to an Unauthorized Actor