CVE-2025-68372 in Linux
Résumé
par VulDB • 21/05/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
nbd : reporter le config_put dans recv_work
Il existe un problème UAF (Use-After-Free) dans recv_work lors de l'exécution de NBD_CLEAR_SOCK et NBD_CMD_RECONFIGURE : nbd_genl_connect // conf_ref=2 (connect et recv_work A) nbd_open // conf_ref=3 recv_work A terminé // conf_ref=2 NBD_CLEAR_SOCK // conf_ref=1 nbd_genl_reconfigure // conf_ref=2 (déclenche recv_work B) fermeture de nbd // conf_ref=1 recv_work B config_put // conf_ref=0 atomic_dec(&config->recv_threads); -> UAF
Ou uniquement avec NBD_CLEAR_SOCK : nbd_genl_connect // conf_ref=2 nbd_open // conf_ref=3 NBD_CLEAR_SOCK // conf_ref=2 fermeture de nbd nbd_release config_put // conf_ref=1 recv_work config_put // conf_ref=0 atomic_dec(&config->recv_threads); -> UAF
Le commit 87aac3a80af5 ("nbd: appeler nbd_config_put() avant de notifier le waiters") a déplacé nbd_config_put() pour qu'il s'exécute avant de réveiller le waiter dans recv_work, afin de s'assurer que nbd_start_device_ioctl() ne serait pas réveillé alors que nbd->task_recv n'était pas encore effacé.
Cependant, dans nbd_start_device_ioctl(), après avoir été réveillé, il appelle explicitement flush_workqueue() pour s'assurer que tous les travaux en cours sont terminés. Par conséquent, il n'est pas nécessaire de déplacer le config_put avant le réveil.
Déplacer nbd_config_put() à la fin de recv_work, afin que la référence soit conservée pendant toute la durée de vie du thread de travail. Cela garantit que la configuration ne peut pas être libérée tant que recv_work est toujours en cours d'exécution, même en cas d'intercalation entre clear et reconfigure.
De plus, nous n'avons pas à nous soucier de recv_work libérant le dernier nbd_put (ce qui provoquerait un blocage) :
chemin A (netlink avec NBD_CFLAG_DESTROY_ON_DISCONNECT) : connect // nbd_refs=1 (déclenche recv_work) ouverture de nbd // nbd_refs=2 NBD_CLEAR_SOCK fermeture de nbd nbd_release nbd_disconnect_and_put flush_workqueue // recv_work terminé nbd_config_put nbd_put // nbd_refs=1 nbd_put // nbd_refs=0 queue_work
chemin B (netlink sans NBD_CFLAG_DESTROY_ON_DISCONNECT) : connect // nbd_refs=2 (déclenche recv_work) ouverture de nbd // nbd_refs=3 NBD_CLEAR_SOCK // conf_refs=2 fermeture de nbd nbd_release nbd_config_put // conf_refs=1 nbd_put // nbd_refs=2 recv_work terminé // conf_refs=0, nbd_refs=1 rmmod // nbd_refs=0
Dépend de : e2daec488c57 ("nbd: Correction du hungtask lors de nbd_config_put")
If you want to get best quality of vulnerability data, you may have to visit VulDB.