CVE-2026-74398 PUBLISHED

ipv6: addrconf: bail out of dad_failure when state is no longer POSTDAD

Assigner: Linux
Reserved: 15.08.2026 Published: 15.08.2026 Updated: 17.08.2026

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

ipv6: addrconf: bail out of dad_failure when state is no longer POSTDAD

addrconf_dad_failure() transitions ifp->state from DAD to POSTDAD via addrconf_dad_end(), which drops ifp->lock on return. The lock is re-acquired after net_info_ratelimited(). A concurrent ipv6_del_addr() can take the lock in that window, set ifp->state to DEAD and run list_del_rcu(&ifp->if_list).

addrconf_dad_failure() then overwrites DEAD with ERRDAD at errdad: and schedules a new dad_work. The work calls ipv6_del_addr() again, hitting the already-poisoned list entry:

general protection fault: 0000 [#1] SMP NOPTI CPU: 4 PID: 217 Comm: kworker/4:1 Workqueue: ipv6_addrconf addrconf_dad_work RIP: 0010:ipv6_del_addr+0xe9/0x280 RAX: dead000000000122 Call Trace: addrconf_dad_stop+0x113/0x140 addrconf_dad_work+0x28c/0x430 process_one_work+0x1eb/0x3b0 worker_thread+0x4d/0x400 kthread+0x104/0x140 ret_from_fork+0x35/0x40

Fold the addrconf_dad_end() logic into addrconf_dad_failure() under a single ifp->lock critical section. The STABLE_PRIVACY branch temporarily drops ifp->lock around address regeneration, so at lock_errdad: verify the state is still POSTDAD before transitioning to ERRDAD; bail out otherwise to avoid overwriting a state set by another path while the lock was released.

Metrics

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

AV:N - The bug is reached from inbound ICMPv6 Neighbor Discovery (NS/NA) packets processed by icmp6_rcv()→ndisc_rcv()→addrconf_dad_failure(), the standard IPv6 network receive path on internet-facing servers, cloud VMs, phones, and IoT devices on shared L2 segments. AC:L - An attacker controls both sides of the race by flooding forged NS/NA during DAD while concurrently triggering ipv6_del_addr() via RTM_DELADDR/CAP_NET_ADMIN in a user namespace, CNI/orchestration address teardown, or interface-down processing; retries make the narrow window reliably winnable. PR:N - Triggering DAD failure requires only unauthenticated ND packet injection on the victim's link; the concurrent ipv6_del_addr() leg needs no victim credentials and can come from automatic address lifecycle events (CNI churn, SLAAC/privacy regeneration, netdev down) rather than attacker admin rights. UI:N - Exploitation does not require any victim user action such as opening files or mounting filesystems; it targets automatic IPv6 address configuration and DAD processing that occurs during normal network connectivity and boot. S:U - The corrupted inet6_ifaddr lifecycle and resulting kernel crash occur within kernel memory management; impact does not cross a VM, container, or IOMMU security boundary into a separate authority. C:H - The race leaves a freed/partially torn-down inet6_ifaddr with corrupted state and a poisoned RCU list entry (LIST_POISON2), constituting use-after-free class memory corruption that can expose adjacent kernel heap contents beyond a pure crash. I:H - Corrupting inet6_ifaddr state after list_del_rcu() and re-queuing dad_work on a dead object enables heap reuse and control of freed object contents, providing a path to arbitrary kernel memory writes and potential code execution beyond denial of service. A:H - The demonstrated failure is a general protection fault in ipv6_del_addr() from addrconf_dad_work on the ipv6_addrconf workqueue, causing a kernel oops/panic and complete loss of system availability on affected hosts.

Product Status

Vendor Linux
Product Linux
Versions Default: unaffected
  • affected from c15b1ccadb323ea50023e8f1cca2954129a62b51 to 47b05836705b63dab93d9ac7c69a3a507375ef80 (excl.)
  • affected from c15b1ccadb323ea50023e8f1cca2954129a62b51 to d21be7d051012c6b572fa4e3334443c250216f7b (excl.)
  • affected from c15b1ccadb323ea50023e8f1cca2954129a62b51 to 875c284c0f98b042bb97abad460f63a24c977f88 (excl.)
  • affected from c15b1ccadb323ea50023e8f1cca2954129a62b51 to 8ed0ce9ea58d677d1bac92614ee5f60f8ea57363 (excl.)
  • affected from c15b1ccadb323ea50023e8f1cca2954129a62b51 to 3bdc86d89fd6c6523753fa6f42fcfaf30ee699cb (excl.)
  • affected from c15b1ccadb323ea50023e8f1cca2954129a62b51 to b61af0268e3d1308c466bf0be5dced844eafc1ef (excl.)
  • affected from c15b1ccadb323ea50023e8f1cca2954129a62b51 to e889aa99ad3ed48bb0ddcff6475b17542532d18b (excl.)
  • affected from c15b1ccadb323ea50023e8f1cca2954129a62b51 to 627ac78f2741e2ebd2225e2e953b6964a8a9182f (excl.)
  • Version 835b474b8f70fa68d68abffad37378e92f661802 is affected
  • affected from 3.10.105 to 3.11 (excl.)
Vendor Linux
Product Linux
Versions Default: affected
  • Version 3.14 is affected
  • unaffected from 0 to 3.14 (excl.)
  • unaffected from 5.10.261 to 5.10.* (incl.)
  • unaffected from 5.15.212 to 5.15.* (incl.)
  • unaffected from 6.1.178 to 6.1.* (incl.)
  • unaffected from 6.6.145 to 6.6.* (incl.)
  • unaffected from 6.12.97 to 6.12.* (incl.)
  • unaffected from 6.18.40 to 6.18.* (incl.)
  • unaffected from 7.1.5 to 7.1.* (incl.)
  • unaffected from 7.2 to * (incl.)

References