一线运维实战手记 · 云计算 · 数据库 · 故障排查
2026年9月4日

CVE-2026-64007 [CRITICAL] – In the Linux kernel, the following vulnerability has been resolved: netfilter: synproxy:

未分类
📑 文章目录

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

netfilter: synproxy: refresh tcphdr after skb_ensure_writable

synproxy_tstamp_adjust() rewrites the TCP timestamp option in place
and then patches the TCP checksum via inet_proto_csum_replace4() on
the caller-supplied tcphdr pointer. Both ipv4_synproxy_hook() and
ipv6_synproxy_hook() obtain that pointer with skb_header_pointer()
before calling in, so it may either alias skb->head directly or
point at the caller’s on-stack _tcph buffer.

Between obtaining the pointer and using it, the function calls
skb_ensure_writable(skb, optend), which on a cloned or non-linear
skb invokes pskb_expand_head() and frees the old skb->head. After
that point the cached th is stale:

caller (ipv[46]_synproxy_hook)
th = skb_header_pointer(skb, …, &_tcph)
synproxy_tstamp_adjust(skb, protoff, th, …)
skb_ensure_writable(skb, optend)
pskb_expand_head() /* kfree(old skb->head) */
…
inet_proto_csum_replace4(&th->check, …)
/* writes into freed head, or
into the caller’s stack copy
leaving the on-wire checksum
stale */

The option bytes are written through skb->data and are fine; only
the checksum update goes through th and so lands in the wrong
place. The result is either a write into freed slab memory or a
packet leaving with a checksum that does not match its payload.

Fix by re-deriving th from skb->data + protoff immediately after
skb_ensure_writable() succeeds, so the subsequent checksum update
targets the linear, writable header.