CVE-2026-64114CWE-125CWE-20

CVE-2026-64114

High · published July 19, 2026

CVSS v3.1
7.8
EPSS
0%
Percentile
2.7
In the wild
Unconfirmed
What it is

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

ipv4: raw: reject IP_HDRINCL packets with ihl < 5

raw_send_hdrinc() validates that the caller-supplied IPv4 header

fits within the message length:

iphlen = iph->ihl * 4;

err = -EINVAL;

if (iphlen > length)

goto error_free;

if (iphlen >= sizeof(*iph)) {

/* fix up saddr, tot_len, id, csum, transport_header */

}

It does not, however, reject ihl < 5. For such a packet the

"if (iphlen >= sizeof(*iph))" branch is skipped, leaving the

crafted iphdr untouched, but the packet is still handed to

__ip_local_out() and onward. Downstream consumers that read

iph->ihl assume a sane value: net/ipv4/ah4.c:ah_output() in

particular subtracts sizeof(struct iphdr) from top_iph->ihl * 4

and passes the (signed-int-negative, then cast to size_t)

result to memcpy(), producing an OOB access of length close to

SIZE_MAX and a host kernel panic.

An IPv4 header with ihl < 5 is malformed by definition (RFC 791:

"Internet Header Length is the length of the internet header in

32 bit words ... Note that the minimum value for a correct header

is 5."). The kernel should not be willing to inject such a

packet into its own output path.

Reject "iphlen < sizeof(*iph)" alongside the existing

"iphlen > length" check. This matches the principle that locally

constructed packets that re-enter the IP stack must pass the same

basic sanity tests that a foreign packet would be subjected to.

Once this lands, the "if (iphlen >= sizeof(*iph))" wrapper around

the fixup branch becomes redundant; left in place to keep the

patch minimal and backport-friendly. A follow-up can unwrap it.

Note that commit 86f4c90a1c5c ("ipv4, ipv6: ensure raw socket

message is big enough to hold an IP header") ensures the message

buffer is large enough to hold an iphdr, but does not constrain

the self-reported iph->ihl.

Reachability: the malformed packet source is any caller with

CAP_NET_RAW, including an unprivileged process in a user+net

namespace on a kernel with CONFIG_USER_NS=y. The reproduced AH

crash also requires a matching xfrm AH policy on the outgoing

route; a container granted CAP_NET_ADMIN can install that state

and policy in its netns. Loopback bypasses xfrm_output, so the

trigger uses a real netdev.

Reproduced on UML + KASAN: kernel-mode fault at addr 0x0 with

memcpy_orig at the crash site. Same shape reproduces inside a

rootless Docker container with --cap-add NET_ADMIN on a stock

distro kernel.

The record
Technical detail
CVSS v3.1
7.8 · HIGH
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00136 · 2.7th percentile
Weaknesses
CWE-125 · Out-of-bounds Read; CWE-20 · Improper Input Validation
Published
2026-07-19T20:17Z
Affected products (16)
ProductVersionsFixed in
linux/linux_kernel≥ 2.6.12.1, < 5.10.2585.10.258
linux/linux_kernel≥ 5.11, < 5.15.2095.15.209
linux/linux_kernel≥ 5.16, < 6.1.1756.1.175
linux/linux_kernel≥ 6.2, < 6.6.1426.6.142
linux/linux_kernel≥ 6.7, < 6.12.926.12.92
linux/linux_kernel≥ 6.13, < 6.18.346.18.34
linux/linux_kernel≥ 6.19, < 7.0.117.0.11
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
References (8)
EPSS history
Timeline
  • 19 JUL 15:40Z
    ipv4: raw: reject IP_HDRINCL packets with ihl < 5
    cvelistv5