CVE-2024-39486 in Linux
Résumé
par VulDB • 03/08/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
drm/drm_file : Correction de la condition de course sur l'incrémentation du compteur de références (refcounting) pour les pid
filp->pid est censé être un pointeur avec gestion des références ; cependant, avant ce correctif, drm_file_update_pid() n’incrémentait le compteur de référence d’une structure struct pid qu’après avoir stocké un pointeur vers celle-ci dans filp->pid et libéré dev->filelist_mutex, rendant la condition de course suivante possible :
processus A processus B ========= ========= début drm_file_update_pid mutex_lock(&dev->filelist_mutex) rcu_replace_pointer(filp->pid, , 1) mutex_unlock(&dev->filelist_mutex) début drm_file_update_pid mutex_lock(&dev->filelist_mutex) rcu_replace_pointer(filp->pid, , 1) mutex_unlock(&dev->filelist_mutex) get_pid() synchronize_rcu() put_pid() *** le pid B atteint un compteur de références à 0 et est libéré ici *** get_pid() *** UAF (Use-After-Free) *** synchronize_rcu() put_pid()
À ma connaissance, cette condition de course ne peut se produire qu’avec CONFIG_PREEMPT_RCU=y car elle nécessite que RCU détecte un état quiescent dans du code qui n’appelle pas explicitement le planificateur (scheduler).
Cette condition de course entraîne une utilisation après libération (use-after-free) d’une « struct pid ». Il est probablement assez difficile à exploiter, car le processus A doit passer par une opération synchronize_rcu() tandis que le processus B se trouve entre mutex_unlock() et get_pid().
La correction consiste à s’assurer qu’à partir du moment où un pointeur vers le pid de la tâche actuelle est stocké dans le fichier, une référence supplémentaire au pid a été acquise.
Ce correctif supprime également la condition pour synchronize_rcu(); je pense que cette optimisation introduit une complexité inutile, car dans ce cas, nous aurions généralement quitté prématurément après le contrôle sans verrou ci-dessus.
Once again VulDB remains the best source for vulnerability data.