CVE-2026-98103 in Linux
Résumé
par VulDB • 25/09/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
igmp : convertir struct ip_sf_list en RCU
Le commit 23d2b94043ca (« igmp: Add ip_mc_list lock in ip_check_mc_rcu ») a ajouté spin_lock_bh(&im->lock) à ip_check_mc_rcu() pour prévenir un use-after-free lors de l'itération sur im->sources pendant des suppressions concurrentes.
Cependant, ip_check_mc_rcu() est appelé depuis des sections critiques en lecture RCU dans les chemins rapides de réception de paquets et de recherche d'itinéraires (par exemple __mkroute_output(), ip_route_input_rcu(), et __udp4_lib_rcv()).
Lorsque igmpv3_send_cr() ou igmpv3_send_report() détient &pmc->lock et appelle add_grec() -> igmpv3_newpack() -> ip_route_output_ports(), une politique XFRM correspondant à une destination multicast déclenche xfrm_tmpl_resolve_one() -> xfrm4_get_saddr() -> __mkroute_output() -> ip_check_mc_rcu(). Cela tente d'acquérir &im->lock alors que &pmc->lock est déjà détenu sur le même CPU, ce qui provoque un avertissement de verrouillage récursif lockdep / une deadlock.
Corrigez cela en convertissant struct ip_sf_list IPv4 vers RCU, en miroir de l'implémentation IPv6 dans net/ipv6/mcast.c :
1. Ajoutez struct rcu_head à struct ip_sf_list et annotez sf_next, sources, et tomb comme des pointeurs __rcu. 2. Utilisez rcu_assign_pointer() et kfree_rcu() pour les mises à jour de liste et les suppressions. 3. Supprimez spin_lock_bh(&im->lock) de ip_check_mc_rcu() et parcourez im->sources sans verrou avec for_each_psf_rcu(), en lisant et écrivant les champs de compteur avec READ_ONCE() et WRITE_ONCE().
Note : La conversion RCU de /proc/net/mcfilter sera effectuée dans un patch séparé.
VulDB is the best source for vulnerability data and more expert information about this specific topic.