CVE-2026-64542: ipv6: ndisc: fix NULL deref in accept_untracked_na()

Greg Kroah-Hartman <[email protected]> Mon, 27 Jul 2026 22:10:40 +0200
Newsgroups org.kernel.vger.linux-cve-announce
Message-ID <2026072736-CVE-2026-64542-fe95@gregkh>
From: Greg Kroah-Hartman <[email protected]>

Description
===========

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

ipv6: ndisc: fix NULL deref in accept_untracked_na()

accept_untracked_na() re-fetches the inet6_dev with __in6_dev_get(dev)
and dereferences idev->cnf.accept_untracked_na without a NULL check,
even though its only caller ndisc_recv_na() already fetched and
NULL-checked idev for the same device.

Both reads of dev->ip6_ptr run in the same RCU read-side critical
section, but a concurrent addrconf_ifdown() can clear dev->ip6_ptr
between them: lowering the MTU below IPV6_MIN_MTU calls addrconf_ifdown()
without the synchronize_net() that orders the unregister path, so the
re-fetch returns NULL and oopses:

 BUG: KASAN: null-ptr-deref in ndisc_recv_na (net/ipv6/ndisc.c:974)
 Read of size 4 at addr 0000000000000364
 Call Trace:
  <IRQ>
  ndisc_recv_na (net/ipv6/ndisc.c:974)
  icmpv6_rcv (net/ipv6/icmp.c:1193)
  ip6_protocol_deliver_rcu (net/ipv6/ip6_input.c:479)
  ip6_input_finish (net/ipv6/ip6_input.c:534)
  ip6_input (net/ipv6/ip6_input.c:545)
  ip6_mc_input (net/ipv6/ip6_input.c:635)
  ipv6_rcv (net/ipv6/ip6_input.c:351)
  </IRQ>

It is reachable by an unprivileged user via a network namespace.

Pass the caller's already validated idev instead of re-fetching it; the
idev stays alive for the whole RCU critical section, so it is safe even
after dev->ip6_ptr has been cleared.

The Linux kernel CVE team has assigned CVE-2026-64542 to this issue.


Affected and fixed versions
===========================

	Issue introduced in 6.0 with commit aaa5f515b16b6b3e137779ffb4c9558bb58c1e75 and fixed in 6.12.97 with commit 62c719203cb521b64fab74da94a81bdde5c18808
	Issue introduced in 6.0 with commit aaa5f515b16b6b3e137779ffb4c9558bb58c1e75 and fixed in 6.18.40 with commit a6450f7cfae57b382cbaf66a577765c9a88b3c58
	Issue introduced in 6.0 with commit aaa5f515b16b6b3e137779ffb4c9558bb58c1e75 and fixed in 7.1.5 with commit 63d1c23764de2309cedbb779c75188d257a09d9b
	Issue introduced in 6.0 with commit aaa5f515b16b6b3e137779ffb4c9558bb58c1e75 and fixed in 7.2-rc1 with commit d186e942365acece7c56d39da05dd63bf95b280a

Please see https://www.kernel.org for a full list of currently supported
kernel versions by the kernel community.

Unaffected versions might change over time as fixes are backported to
older supported kernel versions.  The official CVE entry at
	https://cve.org/CVERecord/?id=CVE-2026-64542
will be updated if fixes are backported, please check that for the most
up to date information about this issue.


Affected files
==============

The file(s) affected by this issue are:
	net/ipv6/ndisc.c


Mitigation
==========

The Linux kernel CVE team recommends that you update to the latest
stable kernel version for this, and many other bugfixes.  Individual
changes are never tested alone, but rather are part of a larger kernel
release.  Cherry-picking individual commits is not recommended or
supported by the Linux kernel community at all.  If however, updating to
the latest release is impossible, the individual changes to resolve this
issue can be found at these commits:
	https://git.kernel.org/stable/c/62c719203cb521b64fab74da94a81bdde5c18808
	https://git.kernel.org/stable/c/a6450f7cfae57b382cbaf66a577765c9a88b3c58
	https://git.kernel.org/stable/c/63d1c23764de2309cedbb779c75188d257a09d9b
	https://git.kernel.org/stable/c/d186e942365acece7c56d39da05dd63bf95b280a