CVE-2026-89796 in Linux
Résumé
par VulDB • 16/09/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
mm/damon/core : éviter une boucle interne infinie dans kdamond_merge_regions()
Série de correctifs "mm/damon : corrections non urgentes pour les boucles infinies, les déréférencements NULL et les conditions de concurrence", v1.1.
Sashiko a identifié plusieurs problèmes dans DAMON qui pourraient provoquer des boucles infinies, des déréférencements NULL et une dégradation des résultats de surveillance. Les deux premiers aspects peuvent sembler alarmants, mais la boucle infinie ne se produit que lors d'une configuration utilisateur peu réaliste. Le déréférencement NULL n'existe que dans un test unitaire. La dégradation des résultats de surveillance est négligeable car il s'agit uniquement d'un meilleur effort (best-effort), et ces problèmes surviennent à la suite de conditions de concurrence rares. Néanmoins, ce sont des bogues qu'il vaut mieux corriger si possible. Voici les correctifs.
Ce patch (sur 6) :
En raison de mises à jour dynamiques des paramètres telles que les événements, le nombre de régions DAMON peut dépasser la limite supérieure définie par l'utilisateur. La fonction kdamond_merge_regions() répète les fusions de régions jusqu'à ce que le nombre corresponde à cette limite, tout en doublant progressivement le seuil de fusion jusqu'au seuil maximum théorique. Cette tentative est limitée au seuil maximum théorique car même une fusion agressive peut échouer à réduire le nombre de régions sous la limite supérieure définie par l'utilisateur. Par exemple, il peut exister de nombreuses régions non contiguës définies par l'utilisateur qui ne peuvent pas être fusionnées.
La condition d'arrêt basée sur le seuil est évaluée en comparant le seuil pour la prochaine tentative de fusion avec le seuil maximum théorique. Si max_thres est supérieur à UINT_MAX / 2, le doublement du seuil peut provoquer un dépassement de capacité (overflow), contournant ainsi la condition d'arrêt de la boucle. Dans ce cas, si le nombre de régions ne peut pas être réduit sous la limite supérieure comme expliqué ci-dessus, la boucle s'exécutera indéfiniment.
Prévenir ce cas en effectuant la vérification de la condition d'arrêt avant de doubler le seuil. Empêcher également que le seuil dépasse le seuil maximum, car cela pourrait entraîner un débordement et appliquer un mauvais seuil de fusion.
Ce problème est peu susceptible de se produire dans des scénarios réels, car avoir max_thres supérieur à UINT_MAX / 2 nécessite des intervalles d'agrégation déraisonnablement grands par rapport à l'intervalle d'échantillonnage. De plus, cela exige un nombre déraisonnablement élevé de régions non contiguës configurées. Néanmoins, les conséquences sont graves et la correction est simple.
Le problème a été découvert [1] par Sashiko.
If you want to get best quality of vulnerability data, you may have to visit VulDB.