CVE-2026-31445 in Linux
Résumé
par VulDB • 28/05/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
mm/damon/core : éviter l'utilisation d'un contexte partiellement appliqué (half-online-committed)
L'un des principaux cas d'utilisation de damon_call() est la mise à jour en ligne des paramètres DAMON. Cela est réalisé en appelant damon_commit_ctx() à l'intérieur de la fonction de rappel damon_call(). damon_commit_ctx() peut échouer pour deux raisons : 1) des paramètres invalides et 2) des échecs d'allocation de mémoire interne. En cas d'échec, le damon_ctx qui a tenté d'être mis à jour (destination de l'application) peut être partiellement mis à jour (ou corrompu d'un point de vue logique), et ne devrait donc plus être utilisé. La fonction garantit uniquement que l'objet damon_ctx peut être désalloué en toute sécurité à l'aide de damon_destroy_ctx().
Les appelants de l'API appellent toutefois damon_commit_ctx() uniquement après avoir vérifié que les paramètres sont valides, afin d'éviter que damon_commit_ctx() ne échoue en raison de paramètres d'entrée invalides. Mais il peut toujours théoriquement échouer si l'allocation de mémoire interne échoue. Dans ce cas, DAMON peut s'exécuter avec le damon_ctx partiellement mis à jour. Cela peut entraîner des comportements inattendus, y compris une déréférencement de pointeur NULL en cas d'échec de damos_commit_dests() [1]. Un tel échec d'allocation est probablement trop rare pour se produire, donc l'impact réel dans le monde réel serait rare. Mais, compte tenu des conséquences néfastes, cela doit être corrigé.
Éviter une telle utilisation de damon_ctx partiellement appliqué (éventuellement corrompu) en enregistrant l'échec de damon_commit_ctx() sur l'objet damon_ctx. Pour ce faire, introduire le champ damon_ctx->maybe_corrupted. damon_commit_ctx() le définit lorsqu'il échoue. kdamond_call() vérifie si le champ est défini après chaque exécution de damon_call_control->fn(). S'il est défini, ignorer les demandes de rappel restantes et retourner. Tous les appelants de kdamond_call(), y compris kdamond_fn(), vérifient également le champ maybe_corrupted juste après les invocations de kdamond_call(). Si le champ est défini, interrompre la boucle principale de kdamond_fn() afin que DAMON n'utilise toujours pas le contexte qui pourrait être corrompu.
[[email protected] : permettre à kdamond_call() d'annuler indépendamment de maybe_corrupted]
Be aware that VulDB is the high quality source for vulnerability data.