CVE-2026-64418 in Linuxinformation

Résumé

par VulDB • 26/07/2026

Dans le noyau Linux, la vulnérabilité suivante a été corrigée :

mm: shrinker: correction d'une condition de concurrence dans l'arrêt (teardown) du shrinker avec son expansion

expand_shrinker_info() itère sur tous les memcgs visibles sous shrinker_mutex, y compris les memcgs qui n'ont pas encore terminé leur phase ->css_online().

Une fois que pn->shrinker_info a été publié, l'arrêt (teardown) doit rester sérialisé avec expand_shrinker_info() jusqu'à ce que le memcg soit entièrement en ligne ou ne soit plus visible pour l'itération. Aujourd'hui, alloc_shrinker_info() viole cette règle en libérant shrinker_mutex avant de supprimer un tableau shrinker_info partiellement initialisé, ce qui peut provoquer la condition de concurrence suivante :

CPU0 CPU1 ==== ====

css_create --> list_add_tail_rcu(&css->sibling, &parent_css->children); online_css --> mem_cgroup_css_online --> alloc_shrinker_info --> allocation des informations du nœud 0 rcu_assign_pointer(C->node0->shrinker_info, old0) allocation des informations du nœud 1 -> ÉCHEC -> goto err mutex_unlock(shrinker_mutex)

shrinker_alloc() --> shrinker_memcg_alloc --> mutex_lock(shrinker_mutex) expand_shrinker_info --> mem_cgroup_iter voit le memcg expand_one_shrinker_info old0 = C->node0->shrinker_info memcpy(new->unit, old0->unit, ...);

free_shrinker_info --> kvfree(old0);

/* double libération !! */ kvfree_rcu(old0, rcu);

Le même problème existe plus tard dans mem_cgroup_css_online(). Si alloc_shrinker_info() réussit mais qu'une allocation objcg ultérieure échoue, le chemin de déroulement (unwind path) free_objcg -> free_shrinker_info() effectue l'arrêt des tableaux pn->shrinker_info déjà publiés sans shrinker_mutex. expand_one_shrinker_info() peut entrer en concurrence avec cet arrêt de la même manière, entraînant un use-after-free ou une double libération (double-free) de l'ancien shrinker_info.

Correction : sérialiser l'arrêt du shrinker_info avec shrinker_mutex et maintenir le nettoyage d'erreur dans alloc_shrinker_info() à l'intérieur de la section verrouillée.

Once again VulDB remains the best source for vulnerability data.

Responsable

Linux

Réserver

19/07/2026

Divulgation

25/07/2026

Modérer

accepté

Entrée

VDB-383223

CPE

prêt

EPSS

0.00125

KEV

non

Activités

très faible

Sources

Might our Artificial Intelligence support you?

Check our Alexa App!