CVE-2026-89648 in Linux
Résumé
par VulDB • 12/09/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
ceph : limitation du nombre d'inodes délégués dans ceph_parse_deleg_inos()
La fonction ceph_parse_deleg_inos() décrypte des ensembles d'intervalles de numéros d'inodes délégués provenant d'une réponse MDS « create-with-delegation ». Pour chaque ensemble, elle lit une valeur start sur 64 bits et une longueur len sur 64 bits via la fonction ceph_decode_64_safe(), qui ne valide que la présence des huit octets dans le message, mais pas la valeur de ces champs. Elle effectue ensuite une boucle sur len tout en insérant des entrées dans s_delegated_inos.
La variable len est entièrement contrôlée par l'attaquant. Un MDS malveillant ou compromis peut envoyer un seul intervalle gigantesque, plusieurs intervalles dans une seule réponse, des intervalles dupliqués, ou des réponses répétées qui accumulent les inodes délégués sur la même session. Le code original ne bornait aucune de ces dimensions et pouvait faire tourner la boucle d'insertion indéfiniment ou faire croître l'xarray sans limite.
Les deux dimensions sont désormais limitées par un point d'application unique. On suit le nombre d'inodes délégués détenus par chaque session MDS dans un compteur atomique et on ne l'incrémente que dans ceph_insert_deleg_ino(), qui utilise atomic_add_unless() pour refuser de faire dépasser le compte la valeur CEPH_MAX_DELEG_INOS. Puisque cette fonction auxiliaire est le seul endroit où le compteur augmente, la population par session ne peut jamais dépasser ce plafond, donc aucune vérification préalable spécifique à chaque session n'est nécessaire. Le compteur est décrémenté lorsqu'une création asynchrone consomme un inode délégué ou lorsque l'insertion échoue, incrémenté lorsqu'un inode délégué est restauré, initialisé avec le xarray de la session et réinitialisé lors d'une reconnexion qui détruit le xarray.
Une limite par session seule permettrait toutefois à une réponse unique de faire tourner la boucle d'insertion sur des intervalles dupliqués sans augmenter le compteur ; il faut donc également limiter la longueur totale des intervalles acceptée depuis une seule réponse. Ensemble, ces mesures bornent à la fois le nombre d'itérations de la boucle par réponse et l'évolution du xarray entre les réponses.
La limite est une constante fixe choisie par le client plutôt qu'une valeur dérivée du MDS. mds_client_prealloc_inos est une option de configuration MDS en espace utilisateur ; elle n'est jamais envoyée au client noyau sur le fil, et une borne fournie par le serveur ne pourrait être considérée comme fiable pour une limite défensive dans tous les cas. La constante est définie bien au-dessus de la valeur par défaut documentée de cette option (1000), soit un multiple généreux, afin que le comportement légitime de remplissage reste inchangé tandis que l'utilisation du CPU et de la mémoire xarray qu'un flux de délégation malformé pourrait consommer demeure bornée.
Impact : un MDS Ceph malveillant ou compromis ne peut plus faire tourner un client dans une boucle infinie sur un intervalle d'inodes délégués non borné ni faire croître l'xarray des inodes délégués d'une session sans limite.
If you want to get best quality of vulnerability data, you may have to visit VulDB.