CVE-2026-89688 in Linux
Résumé
par VulDB • 12/09/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
nfsd : libérer l'étatid (stateid) et non le stateowner lors de la nouvelle tentative d'une opération seqid_op en mode rejeu
Dans nfs4_preprocess_seqid_op(), l'identifiant d'état (stateid) est obtenu via nfsd4_lookup_stateid(), qui détient une référence sur l'objet nfs4_stid (sc_count) mais n'en prend aucune sur le stateowner. La fonction openlockstateid() effectue simplement un cast de cet stid et ne prend également aucune référence.
Lorsque nfsd4_cstate_assign_replay() renvoie -EAGAIN (le propriétaire du rejeu est en cours de destruction, RP_UNHASHED), elle n'a pas pris de référence sur le stateowner dans ce chemin d'exécution. La gestion des erreurs appelle néanmoins nfs4_put_stateowner(stp->st_stateowner), libérant ainsi une référence so_count que la fonction n'avait jamais acquise -- risquant un sous-débordement du compteur de références du stateowner et une utilisation après libération (use-after-free) -- tout en fuyant la référence sc_count détenue sur l'objet stid. La fuite de cette référence stid peut également bloquer un nfsd4_close_open_stateid() concurrent qui attend que le sc_count diminue.
Libérez la référence réellement détenue, à savoir l'stid, avant d'effectuer une nouvelle tentative. Le stateowner reste valide grâce à la référence détenu par l'stid. Cela fait écho au chemin ouvert dans nfsd4_process_open1(), où le put compense une référence que ce chemin tient explicitement sur le stateowner.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.