CVE-2026-64401 in Linux
Résumé
par VulDB • 26/07/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
smb: client: résoudre l'association de partage (tcon) SWN à partir des inscriptions actives
cifs_swn_notify() recherche une inscription de témoin par identifiant sous cifs_swnreg_idr_mutex, libère le mutex, puis utilise le pointeur tcon mis en cache dans cette inscription. Ce pointeur n'est pas une référence assurant la durée de vie (lifetime reference) et il ne constitue plus un représentant stable dès lors que cifs_get_swn_reg() permet à plusieurs associations de partage (tcons) pour le même nom réseau/partage de partager un seul identifiant d'inscription.
Un deuxième montage du même partage peut maintenir l'objet cifs_swn_reg en vie après la désinscription et la libération du premier tcon. L'inscription pointe alors toujours vers le premier tcon qui a été libéré, ce qui signifie que prendre tc_lock ou incrémenter tc_count via swnreg->tcon ne fait qu'avancer l'utilisation-after-free (use-after-free). Prendre tc_lock tout en détenant cifs_swnreg_idr_mutex viole également l'ordre de verrouillage documenté pour CIFS.
La correction consiste à faire en sorte que l'inscription stocke uniquement l'identité stable du témoin : identifiant, nom réseau, nom du partage et indicateurs de notification. Lorsqu'une notification arrive, on copie cette identité sous cifs_swnreg_idr_mutex, on libère le mutex, puis on recherche et on épingle un tcon de témoin actif correspondant actuellement à la paire réseau/partage selon l'ordre normal des verrous cifs_tcp_ses_lock -> tc_lock. Le chemin de notification utilise directement ce tcon épinglé et libère la référence une fois terminé.
Les messages d'inscription et de désutilisation utilisent désormais le tcon actif passé par l'appelant au lieu du tcon mis en cache dans l'inscription. L'envoi final de la désinscription est intégré à cifs_swn_unregister() tandis que l'inscription reste protégée par cifs_swnreg_idr_mutex. Cela supprime la fenêtre précédente d'accès brut aux pointeurs (find/drop/reacquire). Le chemin de libération ne retire uniquement que l'entrée idr et libère les chaînes d'identité stables.
Cela préserve le comportement prévu « une inscription / plusieurs tcons » : un identifiant d'inscription représente une paire réseau/partage, et la gestion des notifications agit sur un représentant actif sélectionné au moment de l'utilisation. Cela préserve également l'ordre CLIENT_MOVE pour le tcon représentant car la désinscription avec ancienne adresse IP est envoyée avant que cifs_swn_register() n'envoie l'inscription avec nouvelle adresse IP.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.