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

igmp: convert struct ip_sf_list to RCU

Commit 23d2b94043ca ("igmp: Add ip_mc_list lock in ip_check_mc_rcu")
added spin_lock_bh(&im->lock) to ip_check_mc_rcu() to prevent a
use-after-free while iterating im->sources during concurrent deletions.

However, ip_check_mc_rcu() is called from RCU read-side critical
sections in packet receive and route lookup fast paths (e.g.
__mkroute_output(), ip_route_input_rcu(), and __udp4_lib_rcv()).

When igmpv3_send_cr() or igmpv3_send_report() holds &pmc->lock and
calls add_grec() -> igmpv3_newpack() -> ip_route_output_ports(),
an XFRM policy matching a multicast destination triggers
xfrm_tmpl_resolve_one() -> xfrm4_get_saddr() -> __mkroute_output() ->
ip_check_mc_rcu(). This attempts to acquire &im->lock while &pmc->lock
is already held on the same CPU, triggering a lockdep recursive locking
warning / deadlock.

Fix this by converting IPv4 struct ip_sf_list to RCU, mirroring the
IPv6 implementation in net/ipv6/mcast.c:

1. Add struct rcu_head to struct ip_sf_list and annotate sf_next,
sources, and tomb as __rcu pointers.
2. Use rcu_assign_pointer() and kfree_rcu() for list updates and
deletions.
3. Remove spin_lock_bh(&im->lock) from ip_check_mc_rcu() and traverse
im->sources locklessly with for_each_psf_rcu(), reading and writing
counter fields with READ_ONCE() and WRITE_ONCE().

Note: RCU conversion of /proc/net/mcfilter will be done in a
separate patch.
Published: 2026-09-25
Score: n/a
EPSS: n/a
KEV: No
Impact: Denial of Service via use‑after‑free or lock deadlock
Action: Apply Patch
AI Analysis

Impact

The Linux kernel patch converts the IPv4 multicast source list from a spin‑lock protected structure into an RCU‑managed list. This change eliminates a use‑after‑free condition that could occur when iterating sources during concurrent deletions, and it removes the possibility of a recursive lockdep warning that could lead to a deadlock. The fix therefore protects the kernel against memory corruption and service disruption caused by malicious or malformed IGMP traffic.

Affected Systems

All Linux kernel releases that preceded the inclusion of commit 23d2b94043ca (the change that adds ip_mc_list locking and RCU conversion). The security advisory applies to any system running the kernel before the patch is applied. Vendor impact is limited to the generic Linux distribution kernel.

Risk and Exploitability

No CVSS score or EPSS information is available for this vulnerability, and it is not listed in the CISA KEV catalog. However, the risk is non‑zero because an attacker that can influence IGMP routing paths or trigger the specific sequence of calls outlined in the description could force the kernel to execute a potentially fatal use‑after‑free or deadlock, leading to a denial of service. The defect requires only that the vulnerable kernel be running; no additional privilege is required for exploitation. The attack vector is inferred to be remote via the network stack, specifically by sending crafted IGMPv3 packets that activate the routing routine path that exercises ip_check_mc_rcu().

Generated by OpenCVE AI on September 25, 2026 at 11:49 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade the Linux kernel to a version that includes commit 23d2b94043ca, which implements the RCU conversion and removes the spin‑lock protection on the multicast list.
  • Reboot the affected hosts to ensure the updated kernel is active and the new list semantics are engaged.
  • After the kernel reload, monitor system logs for lockdep warnings or deadlock messages. Persistent lockdep output may indicate that the upgrade has not fully applied or that other lock ordering issues exist.

Generated by OpenCVE AI on September 25, 2026 at 11:49 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Fri, 25 Sep 2026 10:45:00 +0000

Type Values Removed Values Added
Description In the Linux kernel, the following vulnerability has been resolved: igmp: convert struct ip_sf_list to RCU Commit 23d2b94043ca ("igmp: Add ip_mc_list lock in ip_check_mc_rcu") added spin_lock_bh(&im->lock) to ip_check_mc_rcu() to prevent a use-after-free while iterating im->sources during concurrent deletions. However, ip_check_mc_rcu() is called from RCU read-side critical sections in packet receive and route lookup fast paths (e.g. __mkroute_output(), ip_route_input_rcu(), and __udp4_lib_rcv()). When igmpv3_send_cr() or igmpv3_send_report() holds &pmc->lock and calls add_grec() -> igmpv3_newpack() -> ip_route_output_ports(), an XFRM policy matching a multicast destination triggers xfrm_tmpl_resolve_one() -> xfrm4_get_saddr() -> __mkroute_output() -> ip_check_mc_rcu(). This attempts to acquire &im->lock while &pmc->lock is already held on the same CPU, triggering a lockdep recursive locking warning / deadlock. Fix this by converting IPv4 struct ip_sf_list to RCU, mirroring the IPv6 implementation in net/ipv6/mcast.c: 1. Add struct rcu_head to struct ip_sf_list and annotate sf_next, sources, and tomb as __rcu pointers. 2. Use rcu_assign_pointer() and kfree_rcu() for list updates and deletions. 3. Remove spin_lock_bh(&im->lock) from ip_check_mc_rcu() and traverse im->sources locklessly with for_each_psf_rcu(), reading and writing counter fields with READ_ONCE() and WRITE_ONCE(). Note: RCU conversion of /proc/net/mcfilter will be done in a separate patch.
Title igmp: convert struct ip_sf_list to RCU
First Time appeared Linux
Linux linux Kernel
CPEs cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
Vendors & Products Linux
Linux linux Kernel
References

Subscriptions

Linux Linux Kernel
cve-icon MITRE

Status: PUBLISHED

Assigner: Linux

Published:

Updated: 2026-09-25T10:35:53.942Z

Reserved: 2026-09-25T10:25:14.315Z

Link: CVE-2026-98103

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-09-25T11:17:40.613

Modified: 2026-09-25T11:17:40.613

Link: CVE-2026-98103

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-25T13:45:18Z

Weaknesses

No weakness.