{"id":29257,"date":"2026-09-25T20:32:16","date_gmt":"2026-09-25T12:32:16","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98103"},"modified":"2026-09-25T20:32:16","modified_gmt":"2026-09-25T12:32:16","slug":"cve-2026-98103","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98103","title":{"rendered":"CVE-2026-98103 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nigmp: convert struct"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>igmp: convert struct ip_sf_list to RCU<\/p>\n<p>Commit 23d2b94043ca (&#8220;igmp: Add ip_mc_list lock in ip_check_mc_rcu&#8221;)<br \/>\nadded spin_lock_bh(&amp;im-&gt;lock) to ip_check_mc_rcu() to prevent a<br \/>\nuse-after-free while iterating im-&gt;sources during concurrent deletions.<\/p>\n<p>However, ip_check_mc_rcu() is called from RCU read-side critical<br \/>\nsections in packet receive and route lookup fast paths (e.g.<br \/>\n__mkroute_output(), ip_route_input_rcu(), and __udp4_lib_rcv()).<\/p>\n<p>When igmpv3_send_cr() or igmpv3_send_report() holds &amp;pmc-&gt;lock and<br \/>\ncalls add_grec() -&gt; igmpv3_newpack() -&gt; ip_route_output_ports(),<br \/>\nan XFRM policy matching a multicast destination triggers<br \/>\nxfrm_tmpl_resolve_one() -&gt; xfrm4_get_saddr() -&gt; __mkroute_output() -&gt;<br \/>\nip_check_mc_rcu(). This attempts to acquire &amp;im-&gt;lock while &amp;pmc-&gt;lock<br \/>\nis already held on the same CPU, triggering a lockdep recursive locking<br \/>\nwarning \/ deadlock.<\/p>\n<p>Fix this by converting IPv4 struct ip_sf_list to RCU, mirroring the<br \/>\nIPv6 implementation in net\/ipv6\/mcast.c:<\/p>\n<p>1. Add struct rcu_head to struct ip_sf_list and annotate sf_next,<br \/>\n   sources, and tomb as __rcu pointers.<br \/>\n2. Use rcu_assign_pointer() and kfree_rcu() for list updates and<br \/>\n   deletions.<br \/>\n3. Remove spin_lock_bh(&amp;im-&gt;lock) from ip_check_mc_rcu() and traverse<br \/>\n   im-&gt;sources locklessly with for_each_psf_rcu(), reading and writing<br \/>\n   counter fields with READ_ONCE() and WRITE_ONCE().<\/p>\n<p>Note: RCU conversion of \/proc\/net\/mcfilter will be done in a<br \/>\nseparate patch.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>igmp: convert struct ip_sf_list to RCU<\/p>\n<p>Commit 23d2b94043ca (&#8220;igmp: Add ip_mc_list lock in ip_check_mc_rcu&#8221;)<br \/>\nadded spin_lock_bh(&amp;im<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-29257","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/29257","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=29257"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=29257"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=29257"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}