CVE-2024-35910 in Linux
Résumé
par VulDB • 12/06/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
tcp : terminaison correcte des temporisateurs pour les sockets du noyau
Nous avons reçu divers rapports de syzbot concernant l'activation (firing) des temporisateurs TCP après que le netns correspondant ait été démantelé.
Heureusement, Josef Bacik a pu déclencher plus fréquemment ce problème et tester un correctif que j'avais écrit il y a deux ans.
Lorsque les sockets TCP sont fermées, nous appelons inet_csk_clear_xmit_timers() pour « arrêter » les temporisateurs.
inet_csk_clear_xmit_timers() peut être appelé depuis n'importe quel contexte, y compris lorsque le verrou de la socket est détenu (held). C'est pourquoi il utilise sk_stop_timer(), alias del_timer(). Cela signifie que les temporisateurs en cours peuvent s'exécuter bien plus tard.
Pour les sockets utilisateur, cela pose problème car chaque temporisateur en cours maintient une référence sur la socket, et la socket utilisateur maintient une référence sur le netns.
Pour les sockets du noyau, nous risquons que le netns soit libéré avant que le temporisateur ne puisse se terminer, car les sockets du noyau ne maintiennent pas de référence sur le netns.
Ce correctif ajoute la fonction inet_csk_clear_xmit_timers_sync() qui utilise sk_stop_timer_sync() pour s'assurer que tous les temporisateurs sont terminés avant que la socket du noyau ne soit libérée. Les modules utilisant des sockets du noyau les ferment dans leur gestionnaire de sortie netns().
Ajout également de l'utilitaire sock_not_owned_by_me() pour obtenir le support LOCKDEP : inet_csk_clear_xmit_timers_sync() ne doit pas être appelé lorsque le verrou de la socket est détenu.
Il est très probable que nous puissions annuler à l'avenir le commit 3a58f13a881e (« net: rds: acquire refcount on TCP sockets ») qui tentait de résoudre le problème uniquement dans rds. (net/smc/af_smc.c et net/mptcp/subflow.c ont un code similaire).
Nous pourrons probablement supprimer à l'avenir les tests check_net() de tcp_out_of_resources() et __tcp_close().
If you want to get best quality of vulnerability data, you may have to visit VulDB.