KernelScan.io

HIGH Introduced in 2.6.38

ipv6 McastList Race

CVE-2026-98099

CVSS 7.0 / 10.0 KernelScan AI

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

01

In the Linux kernel, the following vulnerability has been resolved: ipv6: mcast: use rcu_assign_pointer() for __rcu list updates Several places in net/ipv6/mcast.c update RCU-protected lists (np->ipv6_mc_list, idev->mc_list, idev->mc_tomb) using direct pointer assignments instead of rcu_assign_pointer(): 1. In __ipv6_dev_mc_dec(), unlinking a group from idev->mc_list did: *map = ma->next; without rcu_assign_pointer() while concurrent readers traverse idev->mc_list locklessly under rcu_read_lock(). 2. In ipv6_sock_mc_drop() and __ipv6_sock_mc_close(), unlinking a group from np->ipv6_mc_list directly assigned *lnk = mc_lst->next and np->ipv6_mc_list = mc_lst->next without rcu_assign_pointer(), racing with lockless readers in inet6_mc_check(). 3. In __ipv6_sock_mc_join(), mc_lst->next was initialized to np->ipv6_mc_list via raw assignment before publishing mc_lst. 4. In mld_del_delrec() and __ipv6_dev_mc_inc(), __rcu source pointers passed into rcu_assign_pointer() lacked explicit dereference helpers. Fix these by consistently using rcu_assign_pointer() along with mc_dereference() / sock_dereference().

02

Engine v0.6.0

Risk summary

A race condition in the IPv6 multicast list management allows a local unprivileged user to corrupt kernel memory by rapidly joining and leaving multicast groups while the kernel processes incoming traffic. The corruption can lead to information disclosure, arbitrary write, or kernel crash. Any system with IPv6 enabled and local user access is affected.

Affectednet/ipv6/mcast.c (ipv6 multicast)

Vulnerability analysis

The IPv6 multicast subsystem maintains RCU-protected linked lists for socket-level and device-level multicast group memberships. When joining, leaving, or closing multicast groups, the code updated these lists using direct pointer assignments instead of the RCU publish primitive that includes a memory barrier ensuring concurrent readers see consistent, fully-initialized data. Without that barrier, a reader processing an incoming packet could follow a stale or partially-updated pointer to memory that has already been freed or not yet fully initialized, resulting in memory corruption. The fix replaces all raw pointer assignments on RCU-protected list links with the proper RCU pointer-assignment helper and uses correct dereference helpers when reading source values, restoring the memory-ordering guarantees that lockless readers depend on. Any local user with access to IPv6 sockets can trigger this by rapidly joining and leaving multicast groups while traffic is being processed, requiring no special privileges—only that IPv6 networking is enabled.

03

BranchIntroducedFixed inPatch commit
6.122.6.386.12.11449d7e1b456ba
6.182.6.386.18.57afca229b39ac
6.62.6.386.6.1600e3e3cec28c4
7.22.6.387.2.72e46b0c9fcf7
mainline2.6.387.30c8f56c583c3

04

State of the newest release of each Civil Infrastructure Platform SLTS tree, from CIP's own fix records.

CIP treeState
cip/6.12Affected — no CIP fix yet (latest 6.12.112-cip33)
cip/6.1Affected — no CIP fix yet (latest 6.1.189-cip61)
cip/6.1-rtAffected — no CIP fix yet (latest 6.1.189-cip61-rt32)
cip/5.10Affected — no CIP fix yet (latest 5.10.271-cip78)
cip/5.10-rtAffected — no CIP fix yet (latest 5.10.268-cip77-rt34)
cip/4.19Affected — no CIP fix yet (latest 4.19.325-cip136)
cip/4.19-rtAffected — no CIP fix yet (latest 4.19.325-cip136-rt50)
cip/4.4Affected — no CIP fix yet (latest 4.4.302-cip115)
cip/4.4-rtAffected — no CIP fix yet (latest 4.4.302-cip115-rt63)