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: n/a
EPSS: n/a
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

The bug in the Linux kernel’s veth driver occurs when an XDP program modifies packet fragment sizes. After the fragment area is adjusted, the driver copies the new fragment size into skb->data_len but fails to adjust skb->len. This mismatch causes skb_headlen() to report a linear size larger than the actual linear data. In the reported reproduction, __skb_datagram_iter copied 1024 bytes past the true linear tail into userspace, exposing kernel pointer data and other packet metadata. The original packet payload was displaced and truncated. Additionally, the old implementation could trigger SKB_LINEAR_ASSERT when bpf_xdp_pull_data() advanced data_end while fragments remained. The applied patch synchronizes data_len and len and uses skb_set_tail_pointer() to safely adjust the skb tail.

Affected Systems

Affected systems include any Linux kernel configurations that expose the veth driver, regardless of distribution, for versions built before the patch referenced in the CVE. The vulnerability is tied to usage of XDP programs that manipulate fragment areas on veth interfaces. The issue is present in every kernel that still uses the pre‑patch skb handling logic for veth devices.

Risk and Exploitability

Because the CVSS score is unavailable and the EPSS score is not reported, the exact risk level cannot be quantified. The described bug permits a local attacker who can load or modify an XDP program on a veth interface to read kernel memory beyond the intended packet buffer, potentially exposing pointers and metadata. This same flaw can trigger a kernel crash via SKB_LINEAR_ASSERT, resulting in denial of service. The ability to exploit the flaw does not inherently require privilege escalation beyond the rights needed to load the XDP program. Based on the description, it is inferred that such an attacker would need CAP_SYS_ADMIN or equivalent eBPF execution rights.

Generated by OpenCVE AI on August 22, 2026 at 19:05 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Apply the latest Linux kernel release that incorporates the veth skb length accounting fix.
  • Remove or modify any XDP programs that adjust fragment areas on veth interfaces to avoid the buggy path.
  • If a kernel update cannot be performed immediately, disable XDP on veth devices or prevent fragment adjustments to mitigate the issue, and monitor system logs for SKB_LINEAR_ASSERT occurrences.

Generated by OpenCVE AI on August 22, 2026 at 19:05 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

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-22T15:31:58.295Z

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-22T16:16:33.770

Link: CVE-2026-74612

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-22T19:15:03Z

Weaknesses
  • CWE-125

    Out-of-bounds Read

  • CWE-200

    Exposure of Sensitive Information to an Unauthorized Actor