KernelScan.io

CRITICAL Introduced in 5.9

vxlan PMTU UAF

CVE-2026-63993

CVSS 9.8 / 10.0 NVD

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

KernelScan AI9.8CRITICAL

01

In the Linux kernel, the following vulnerability has been resolved: vxlan: do not reuse cached ip_hdr() value after skb_tunnel_check_pmtu() skb_tunnel_check_pmtu() can change skb->head. Reusing old_iph afer skb_tunnel_check_pmtu() can cause an UAF. Use instead ip_hdr(skb) as done in drivers/net/bareudp.c and drivers/net/geneve.c. Found by Sashiko.

02

Engine v0.4.0

Risk summary

A use-after-free vulnerability in the Linux kernel VXLAN driver allows a remote attacker to trigger memory corruption by sending packets that cause PMTU discovery processing. The bug occurs because a cached pointer to the IP header becomes stale after skb_tunnel_check_pmtu() may reallocate the socket buffer's head, leading to potential heap corruption, information disclosure, or kernel crash. Industry convention presumes attacker-reachable heap corruption is exploitable for both reads and writes.

Affecteddrivers/net/vxlan/vxlan_core.c (VXLAN tunnel driver)

Vulnerability analysis

The root cause is that vxlan_xmit_one() caches the IP header pointer as old_iph before calling skb_tunnel_check_pmtu(), which can reallocate skb->head (e.g., via pskb_expand_head). After this reallocation, old_iph points to freed memory. The stale pointer is then passed to ip_tunnel_ecn_encap() in two code paths (IPv4 and IPv6 outer encapsulation). This constitutes a use-after-free on a heap object. The fix replaces old_iph with ip_hdr(skb), which recomputes the header pointer from the current skb->head, consistent with how bareudp.c and geneve.c handle the same pattern. The attack surface is network-reachable: an attacker can send crafted packets through a VXLAN tunnel endpoint that trigger PMTU processing, causing the skb reallocation and subsequent UAF. No authentication or privileges are required from the network perspective, though the system must be configured as a VXLAN endpoint.

03

BranchIntroducedFixed inPatch commit
5.105.95.10.2596b8bfce9d2f7
5.155.95.15.2109257f56ac47e
6.15.96.1.1768d435d68d71f
6.125.96.12.93609e63312c29
6.185.96.18.355303925e3605
6.65.96.6.143dc3bfa050f87
7.05.97.0.12a493efd4336c
mainline5.97.17d9ef0cb2715
cip/4.195.94.19.325-cip1350311a806ee43
cip/4.19-rt5.94.19.325-cip136-rt500311a806ee43
cip/5.105.95.10.260-cip756b8bfce9d2f7
cip/5.10-rt5.95.10.260-cip75-rt336b8bfce9d2f7
cip/6.15.96.1.177-cip588d435d68d71f
cip/6.1-rt5.96.1.182-cip59-rt318d435d68d71f
cip/6.125.96.12.94-cip26609e63312c29

04

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

CIP treeState
cip/6.12Fixed in 6.12.94-cip26
cip/6.1Fixed in 6.1.177-cip58
cip/6.1-rtFixed in 6.1.182-cip59-rt31
cip/5.10Fixed in 5.10.260-cip75
cip/5.10-rtFixed in 5.10.260-cip75-rt33
cip/4.19Fixed in 4.19.325-cip135
cip/4.19-rtFixed in 4.19.325-cip136-rt50