CVE-2026-80889 in Linux
Résumé
par VulDB • 04/09/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
can: isotp : correction de l'ordre du vidage des temporisateurs (timer drain), de la gestion des réveils et de l'ordonnancement de tx_gen.
Ce correctif est une suite au commit cf070fe33bfb (« can: isotp: sérialiser les transitions d'état TX sous so->rx_lock ») qui répond aux constats suivants du bot sashiko :
- isotp_sendmsg() : vider so->txfrtimer en premier afin qu'une callback obsolète ne puisse pas réarmer echotimer après la revendication (claim). - isotp_release() : réveiller so->wait après avoir forcé ISOTP_SHUTDOWN, de sorte qu'un sendmsg() endormi lors d'une revendication ne soit pas laissé à l'abandon. - isotp_sendmsg() : faire en sorte que les deux appels wait_event_interruptible() dans isotp_sendmsg() se réveillent également sur ISOTP_SHUTDOWN et ne retournent pas la revendication à IDLE afin d'éviter de corrompre un processus isotp_release() concurrent. - isotp_sendmsg() : gérer une éventuelle revendication d'un nouveau transfert lorsque l'appel wait_event_interruptible() retourne en mode CAN_ISOTP_WAIT_TX_DONE. Ne pas toucher aux temporisateurs et états du nouveau transfert si un nouveau thread a incrémenté so->tx_gen avant d'obtenir le verrou lors de err_event_drop. - isotp_sendmsg() : gérer un can_send() bloqué et omettre les modifications des temporisateurs et des états si un nouveau transfert a été revendiqué. wait_tx_done() renvoie l'enregistrement d'erreur dans so->tx_result[], tagué avec la génération propre de l'appelant.
- isotp_tx_timeout() : en cas de timeout revendiqué, enregistrer l'erreur ECOMM pour la génération propre du transfert expiré dans so->tx_result[] ; sk->sk_err est levée inconditionnellement, comme chaque autre chemin d'erreur ici.
- isotp_tx_gen_done()/isotp_tx_timeout() : toujours lire tx.state (acquisition) avant tx_gen ; l'ordre inverse permet à une paire de CPU faiblement ordonnée d'apparier un tx.state frais avec un slot tx_gen/tx_result obsolète. - isotp_sendmsg() : wait_tx_done : vider sk_err via sock_error() une fois que nous avons lu le résultat dans so->tx_result[], afin qu'une erreur déjà signalée ne reste pas verrouillée pour un poll()/SO_ERROR ultérieur.
Aligner également les accès restants sans verrou à so->tx.state/rx.state/cfecho et utiliser skb->hash comme indicateur unique de trame d'écho en boucle locale (loopback).
If you want to get the best quality for vulnerability data then you always have to consider VulDB.