CVE-2026-80840

CVE-2026-80840

published September 4, 2026

CVSS
—
EPSS
0%
Percentile
9.9
In the wild
Unconfirmed
What it is

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

ipv6: seg6: clear IPv4 control block on IPIP decapsulation

End.DX4 and End.DT4 decapsulate an IPv4 packet through

decap_and_validate() and send it directly to IPv4 routing. The inner

packet therefore bypasses ip_rcv_core(), which normally clears IPCB

before IPv4 interprets skb->cb.

The skb instead retains IP6CB data from the outer packet. IP6CB and

IPCB use the same skb->cb storage, so IP6CB(skb)->lastopt overlaps

IPCB(skb)->opt.optlen and srr, while IP6CB(skb)->nhoff overlaps rr and

ts.

The sender can make the stale optlen byte nonzero with a valid outer

extension-header chain. The reproducers put an eight-byte Destination

Options header immediately after the 40-byte IPv6 header and before the

Segment Routing Header. ipv6_destopt_rcv() records the sender-controlled

Destination Options offset in both lastopt and nhoff, setting them to

40. On the reproduced little-endian x86-64 kernel, IPv4 therefore sees

optlen = 40 and rr = 40.

Both tcp_v4_save_options() and __ip_options_echo() skip option copying

when optlen is zero. Here optlen is 40, so the TCP SYN path allocates

room for 40 bytes of option data and calls __ip_options_echo(). The

stale rr value makes that function read inner packet byte 41 as the

Record Route option length. The reproducers set that sender-controlled

byte to 255, so __ip_options_echo() copies 255 bytes into the 40-byte

option-data area.

Separate End.DX4 and End.DT4 reproducers on the unpatched v7.2-rc5

kernel both produced:

BUG: KASAN: slab-out-of-bounds in __ip_options_echo()

Write of size 255

The relevant End.DX4 call path is:

__ip_options_echo

tcp_v4_route_req

tcp_conn_request

tcp_v4_conn_request

tcp_rcv_state_process

tcp_v4_do_rcv

tcp_v4_rcv

ip_protocol_deliver_rcu

ip_local_deliver_finish

ip_local_deliver

input_action_end_dx4_finish

input_action_end_dx4

The relevant End.DT4 call path is:

__ip_options_echo

tcp_v4_route_req

tcp_conn_request

tcp_v4_conn_request

tcp_rcv_state_process

tcp_v4_do_rcv

tcp_v4_rcv

ip_protocol_deliver_rcu

ip_local_deliver_finish

ip_local_deliver

input_action_end_dt4

tcp_v4_save_options() is inlined into the tcp_v4_route_req() path, so

it does not appear as a separate frame.

When decap_and_validate() handles IPPROTO_IPIP, save the ingress

interface from IP6CB, clear IPCB, and restore the saved value. Doing

this in the common decapsulation path covers End.DX4, End.DT4, and

End.DT46's IPv4 arm.

Use IP6CB(skb)->iif rather than skb->skb_iif. These actions run after

l3mdev processing, which can replace skb_iif with the L3 master;

IP6CB iif still records the receiving interface set at IPv6 ingress.

The record
Technical detail
CVSS
Not scored
CVSS v4.0
Not supplied
EPSS
0.00205 · 9.9th percentile
Published
2026-09-04T20:18Z
References (9)
EPSS history
Timeline
  • 06 SEP 03:33Z
    EPSS moved — → 0%
    epss
  • 04 SEP 15:54Z
    ipv6: seg6: clear IPv4 control block on IPIP decapsulation
    cvelistv5