CVE-2026-31415None▾ SunlitIn the Linux kernel, the following vulnerability has been resolved: ipv6: avoid overflows in ip6_datagram_send_ctl() Yiming Qian reported : <quote> I believe I found a locally triggerable kernel bug in the IPv6 sendmsg ancillary-data…
▾ Sunlit zone — Low / medium · no exploitation signal
impact 2.8 · likelihood 0 · exploitation 0
Need a working PoC? Pro members can cast a request and our team develops one — it lands right here.
Exploit-prediction probability, daily snapshots since Sep 8.
Disclosure to exploitation, from the record and what we observed since indexing it.
Disclosed via CVEORG
Last analysed / modified upstream
0.1%
In the Linux kernel, the following vulnerability has been resolved:
ipv6: avoid overflows in ip6_datagram_send_ctl()
Yiming Qian reported :
<quote>
I believe I found a locally triggerable kernel bug in the IPv6 sendmsg
ancillary-data path that can panic the kernel via skb_under_panic()
(local DoS).
The core issue is a mismatch between:
struct ipv6_txoptions::opt_flen, type
__u16) andopt->dst1opt)when multiple IPV6_DSTOPTS control messages (cmsgs) are provided.
include/net/ipv6.h:
struct ipv6_txoptions::opt_flen is __u16 (wrap possible).
(lines 291-307, especially 298)net/ipv6/datagram.c:ip6_datagram_send_ctl():
IPV6_DSTOPTS and accumulates into opt_flen
without rejecting duplicates. (lines 909-933)net/ipv6/ip6_output.c:__ip6_append_data():
opt->opt_flen + opt->opt_nflen to compute header
sizes/headroom decisions. (lines 1448-1466, especially 1463-1465)net/ipv6/ip6_output.c:__ip6_make_skb():
ipv6_push_frag_opts() if opt->opt_flen is non-zero.
(lines 1930-1934)net/ipv6/exthdrs.c:ipv6_push_frag_opts() / ipv6_push_exthdr():
ipv6_optlen(opt->dst1opt) (based on the
pointed-to header). (lines 1179-1185 and 1206-1211)opt_flen is a 16-bit accumulator:include/net/ipv6.h:298 defines __u16 opt_flen; /* after fragment hdr */.ip6_datagram_send_ctl() accepts repeated IPV6_DSTOPTS cmsgs
and increments opt_flen each time:net/ipv6/datagram.c:909-933, for IPV6_DSTOPTS:
len = ((hdr->hdrlen + 1) << 3);CAP_NET_RAW using ns_capable(net->user_ns, CAP_NET_RAW). (line 922)opt->opt_flen += len; (line 927)opt->dst1opt = hdr; (line 928)There is no duplicate rejection here (unlike the legacy
IPV6_2292DSTOPTS path which rejects duplicates at
net/ipv6/datagram.c:901-904).
If enough large IPV6_DSTOPTS cmsgs are provided, opt_flen wraps
while dst1opt still points to a large (2048-byte)
destination-options header.
In the attached PoC (poc.c):
hdrlen=255 => len = (255+1)*8 = 2048hdrlen=0 => len = 832*2048 + 8 = 65544, so (__u16)opt_flen == 8dst1opt points to a 2048-byte header.opt_flen:net/ipv6/ip6_output.c:1463-1465:
headersize = sizeof(struct ipv6hdr) + (opt ? opt->opt_flen + opt->opt_nflen : 0) + ...;With wrapped opt_flen, headersize/headroom decisions underestimate
what will be pushed later.
dst1opt and is not limited by wrapped opt_flen:net/ipv6/ip6_output.c:1930-1934:
if (opt->opt_flen) proto = ipv6_push_frag_opts(skb, opt, proto);net/ipv6/exthdrs.c:1206-1211, ipv6_push_frag_opts() pushes
dst1opt via ipv6_push_exthdr().net/ipv6/exthdrs.c:1179-1184, ipv6_push_exthdr() does:
skb_push(skb, ipv6_optlen(opt));memcpy(h, opt, ipv6_optlen(opt));With insufficient headroom, skb_push() underflows and triggers
skb_under_panic() -> BUG():
net/core/skbuff.c:2669-2675 (skb_push() calls skb_under_panic())
net/core/skbuff.c:207-214 (skb_panic() ends in BUG())
The IPV6_DSTOPTS cmsg path requires CAP_NET_RAW in the target
netns user namespace (ns_capable(net->user_ns, CAP_NET_RAW)).
Root (or any task with CAP_NET_RAW) can trigger this without user
namespaces.
An unprivileged uid=1000 user can trigger this if unprivileged
user namespaces are enabled and it can create a userns+netns to obtain
namespaced CAP_NET_RAW (the attached PoC does this).
Local denial of service: kernel BUG/panic (system crash).
---truncated---
Linux >= 333fad5364d6b457c8d837f7d05802d2aaf8a961 < 2dbfb003bbf3fc0e94f07efefab0ebcf83029a2aLinux >= 333fad5364d6b457c8d837f7d05802d2aaf8a961 < 4082f9984a694829153115d28c956a3534f52f29Linux >= 333fad5364d6b457c8d837f7d05802d2aaf8a961 < 0bdaf54d3aaddfe8df29371260fa8d4939b4fd6fLinux >= 333fad5364d6b457c8d837f7d05802d2aaf8a961 < 5e4ee5dbea134e9257f205e31a96040bed71e83fLinux >= 333fad5364d6b457c8d837f7d05802d2aaf8a961 < 63fda74885555e6bd1623b5d811feec998740ba4Linux >= 333fad5364d6b457c8d837f7d05802d2aaf8a961 < 9ed81d692758dfb9471d7799b24bfa7a08224c31Linux >= 333fad5364d6b457c8d837f7d05802d2aaf8a961 < 872b74900d5daa37067ac676d9001bb929fc6a2aLinux >= 333fad5364d6b457c8d837f7d05802d2aaf8a961 < 4e453375561fc60820e6b9d8ebeb6b3ee177d42eLinux 2.6.14Refer to the linked advisories for vendor-supplied fixes and affected version ranges.
Connected by shared product, vendor, weakness, or advisory.
CVE-2026-68286NoneIn the Linux kernel, the following vulnerability has been resolved: drop_monitor: perform u64_stats updates under IRQ-disabled section In net_dm_packet_trace_kfree_skb_hit() and net_dm_hw_trap_packet_probe(), u64_stats_update_begin() /…
CVE-2026-68337NoneIn the Linux kernel, the following vulnerability has been resolved: bpf: Reject redirect helpers without a bpf_net_context The bpf_redirect*() helpers and skb_do_redirect() obtain the per-task bpf_redirect_info via bpf_net_ctx_get_ri()…
CVE-2026-68287High· 7.5In the Linux kernel, the following vulnerability has been resolved: drop_monitor: fix size calculations for 64-bit attributes net_dm_packet_report_fill() and net_dm_hw_packet_report_fill() use nla_put_u64_64bit() to append 64-bit attri…
CVE-2026-68288NoneIn the Linux kernel, the following vulnerability has been resolved: net: drop_monitor: fix info leak in NET_DM_ATTR_PAYLOAD net_dm_packet_report_fill() and net_dm_hw_packet_report_fill() open code the NET_DM_ATTR_PAYLOAD attribute to a…
CVE-2026-68289NoneIn the Linux kernel, the following vulnerability has been resolved: tipc: fix integer overflow in tipc_recvmsg() and tipc_recvstream() In tipc_recvmsg(), the copy length is computed as: copy = min_t(int, dlen - offset, buflen); buf…
CVE-2026-68303NoneIn the Linux kernel, the following vulnerability has been resolved: drm/vc4: hvs/v3d: Fix null dereference in unbind The hvs and v3d drivers use dev_get_drvdata(master) in their unbind functions