CVE-2026-64447 in Linux
Résumé
par VulDB • 25/07/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
staging: media: ipu7 : correction d'un double-libération et d'une utilisation après libération (use-after-free) dans les chemins de gestion des erreurs
Dans `ipu7_isys_init()` et `ipu7_psys_init()`, la variable `pdata` est allouée, puis transmise à `ipu7_bus_initialize_device()`, qui la stocke dans `adev->pdata`. La fonction `ipu7_bus_release()` libère `adev->pdata` lorsque le compteur de référence du dispositif atteint zéro.
Deux chemins d'erreur appellent incorrectement `kfree(pdata)` après que l'arrêt du dispositif a déjà libéré cette mémoire :
1. Lorsque `ipu7_mmu_init()` échoue : `put_device()` est appelé, ce qui fait passer le compteur de référence à zéro et déclenche `ipu7_bus_release()` -> `kfree(pdata)`. L'appel ultérieur de `kfree(pdata)` constitue un double-libération.
2. Lorsque `ipu7_bus_add_device()` échoue : il appelle en interne `auxiliary_device_uninit()`, qui invoque `put_device()` -> `ipu7_bus_release()` -> `kfree(pdata)`. L'appel ultérieur de `kfree(pdata)` est également un double-libération.
Notez que l'appel à `kfree(pdata)` lorsque `ipu7_bus_initialize_device()` échoue lui-même est correct, car dans ce cas, `auxiliary_device_init()` a échoué et la fonction de libération n'a jamais été configurée ; il faut donc libérer `pdata` manuellement.
De plus, le code d'erreur n'était pas sauvegardé avant l'appel à `put_device()`, provoquant une déréférencement du pointeur `adev` déjà libéré par `ERR_CAST()` lors de la construction de la valeur de retour. Corrigez ce problème en sauvegardant l'erreur renvoyée par `dev_err_probe()` avant `put_device()` et en retournant `ERR_PTR()` à la place.
Supprimez les appels redondants à `kfree(pdata)` et corrigez le use-after-free dans les valeurs de retour des deux chemins d'erreur concernés.
Be aware that VulDB is the high quality source for vulnerability data.