KernelScan.io

CRITICAL

ipv6 DstDevOverhead Overflow

CVE-2026-98570

CVSS 9.8 / 10.0 KernelScan AI

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

01

In the Linux kernel, the following vulnerability has been resolved: net: ipv6: keep room for the mac header in dst_dev_overhead() The seg6, ioam6 and rpl lwtunnels size their skb_cow_head() request as the length they are about to push plus dst_dev_overhead(), then push the new headers and rebuild the mac header below them with skb_mac_header_rebuild(). That rebuild needs skb->mac_len of headroom, but dst_dev_overhead() leaves LL_RESERVED_SPACE() of the egress device, 16 bytes for plain Ethernet. Where the mac header is longer than that, as it is on ingress through a VLAN device with reorder_hdr off, the rebuild runs out of room: skb_set_mac_header(skb, -skb->mac_len) computes a negative offset, stores it unchecked in the u16 skb->mac_header, and the memmove that follows writes skb->mac_len bytes about 64 KB past skb->head. Forwarding plain ping6 traffic through such a device reproduces it on all five seg6 encapsulation modes and on the rpl and ioam6 inline paths; skb->mac_header comes back as 65534 on a 704-byte head. Return the larger of the two. The helper already returns skb->mac_len when it has no dst, so this only makes the other branch agree, and it covers every caller rather than each call site in turn.

02

Engine v0.9.0

Risk summary

A remote attacker can trigger a kernel heap buffer overflow by sending IPv6 traffic through a vulnerable system configured with seg6, ioam6, or rpl lwtunnels and a VLAN interface using reorder_hdr off. The bug allows arbitrary kernel memory corruption, leading to full system compromise.

Affectedinclude/net/dst.h (IPv6 networking)

Vulnerability analysis

The dst_dev_overhead() helper incorrectly calculates the required headroom for SKB reallocation by only considering the egress device's LL_RESERVED_SPACE (16 bytes for Ethernet) and ignoring the actual MAC header length of the incoming packet. When forwarding IPv6 traffic through a VLAN interface with reorder_hdr disabled, the MAC header is larger than 16 bytes. The seg6, ioam6, and rpl lwtunnels use this underestimated value for skb_cow_head(), then push new headers and call skb_mac_header_rebuild(), which computes a negative offset that wraps in the u16 mac_header field. The subsequent memmove writes the MAC header approximately 64 KB past the SKB head buffer, corrupting adjacent kernel heap memory. The fix makes dst_dev_overhead() return the maximum of skb->mac_len and LL_RESERVED_SPACE, ensuring sufficient headroom for the MAC header rebuild. This vulnerability is reachable from the network by any attacker who can send IPv6 packets to a system acting as a router with the affected lwtunnel features enabled.

03

BranchIntroducedFixed inPatch commit
5.105.10.2355.11—
5.155.15.1795.16—
6.16.1.1306.2—
6.126.12.166.1336c07127924f
6.136.13.46.1487cd6b717e40
6.66.6.816.7—
7.2—7.2.9—
mainline—7.3—

04

State of the newest release of each Civil Infrastructure Platform SLTS tree, from CIP's own fix records.

CIP treeState
cip/6.12Affected — no CIP fix yet (latest 6.12.112-cip33)
cip/6.1Affected — no CIP fix yet (latest 6.1.189-cip61)
cip/6.1-rtAffected — no CIP fix yet (latest 6.1.189-cip61-rt32)
cip/5.10Affected — no CIP fix yet (latest 5.10.271-cip78)
cip/5.10-rtAffected — no CIP fix yet (latest 5.10.268-cip77-rt34)