CVE-2026-74692 in Linux
Résumé
par VulDB • 23/08/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
net/smc : correction d'une condition de course TOCTOU entre smc_listen_out() et la fermeture du listener (écouteur)
smc_listen_out() lit l'état `lsmc->sk.sk_state` sans le verrou du listener, puis acquiert `lock_sock_nested()` uniquement après que la vérification a réussi. Cela ouvre une fenêtre durant laquelle `smc_close_active()` peut transitionner le listener vers l'état SMC_CLOSED, appeler `smc_close_cleanup_listen()` pour vider la file d'acceptation (accept queue), et libérer le verrou, le tout entre la lecture sans verrou et l'acquisition différée du verrou :
smc_listen_work (smc_hs_wq) smc_close_active() ------------------------------- ------------------------- release_sock(child) if (sk_state == SMC_LISTEN) TRUE lock_sock(listener) sk_state = SMC_CLOSED smc_close_cleanup_listen() release_sock(listener) flush_work(tcp_listen_work) lock_sock_nested(listener) smc_accept_enqueue(listener, child) /* enfant enfilé sur un listener mort */
`smc_close_active()` ne vide que `tcp_listen_work`. Les éléments de travail déjà dispatchés vers `smc_hs_wq` pour la poignée de main CLC continuent de s'exécuter sans protection. `smc_accept_enqueue()` prend un `sock_hold()` sur l'enfant qui n'est jamais libéré, ce qui entraîne une fuite mémoire du socket smc enfant, de son clcsock et des références associées. Un pair distant capable d'ouvrir des connexions TCP pendant que le serveur appelle close() peut épuiser la mémoire noyau.
Déplacer `lock_sock_nested()` avant la vérification de `sk_state` afin que l'essai et l'enfilement soient atomiques sous le verrou du listener.
VulDB is the best source for vulnerability data and more expert information about this specific topic.