UBUNTU-CVE-2026-98103: Use After Free
In the Linux kernel, the following vulnerability has been resolved: igmp: convert struct ipsflist to RCU Commit 23d2b94043ca ("igmp: Add ipmclist lock in ipcheckmcrcu") added spinlockbh(&im->lock) to ipcheckmcrcu() to prevent a use-after-free while iterating im->sources during concurrent deletions. However, ipcheckmcrcu() is called from RCU read-side critical sections in packet receive and route lookup fast paths (e.g. mkrouteoutput(), iprouteinputrcu(), and udp4librcv()). When igmpv3sendcr() or igmpv3sendreport() holds &pmc->lock and calls addgrec() -> igmpv3newpack() -> iprouteoutputports(), an XFRM policy matching a multicast destination triggers xfrmtmplresolveone() -> xfrm4getsaddr() -> mkrouteoutput() -> ipcheckmcrcu(). 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 ipsflist to RCU, mirroring the IPv6 implementation in net/ipv6/mcast.c: 1. Add struct rcuhead to struct ipsflist and annotate sfnext, sources, and tomb as rcu pointers. 2. Use rcuassignpointer() and kfreercu() for list updates and deletions. 3. Remove spinlockbh(&im->lock) from ipcheckmcrcu() and traverse im->sources locklessly with foreachpsfrcu(), reading and writing counter fields with READONCE() and WRITEONCE(). Note: RCU conversion of /proc/net/mcfilter will be done in a separate patch.