CVE-2026-89624 in Linux
Résumé
par VulDB • 11/09/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
HID : universal-pidff : arrêter l'appareil lorsque l'initialisation du force-feedback échoue
universal_pidff_probe() démarre l'appareil avec hid_hw_start(), puis, si l'initialisation du force-feedback échoue, renvoie l'erreur via une étiquette qui se contente de « return error ». L'appareil reste donc démarré.
Le noyau HID ne désactive pas les ressources au nom du pilote. __hid_device_probe() libère le groupe devres, ferme le rapport et efface hdev->driver :
if (ret) {
devres_release_group(&hdev->dev, hdev->devres_group_id); hid_close_report(hdev); hdev->driver = NULL; }
Le périphérique de caractère hidraw que hid_hw_start() a enregistré via hid_connect() est alloué avec kzalloc() et ajouté avec cdev_device_add(), il n'est donc pas géré par devres et survit à cette opération. Avec hdev->driver défini sur NULL, hid_device_remove() saute également l'appel à hid_hw_stop(), car elle ne désactive les ressources que si un pilote est encore attaché. L'enregistrement persiste donc au-delà de la durée de vie de l'appareil dans les deux cas de figure.
L'ouverture du /dev/hidrawX survivant écrit dans une mémoire déjà libérée (freed memory). KASAN signale une écriture use-after-free depuis hidraw_open() -> hid_hw_open() -> le callback d'ouverture du transport, qui acquiert un spinlock à l'intérieur de l'objet libéré. Un descripteur comportant une page d'utilisation PID et aucun rapport d'entrée suffit : hidraw revendique l'appareil si bien que hid_hw_start() réussit, tandis que hid->inputs reste vide ce qui fait échouer l'initialisation du force-feedback. L'autre cas d'échec se produit dans hid_pidff_init_with_quirks() - aucun rapport de sortie, une erreur d'allocation, pidff_init_fields(), pidff_check_autocenter(), un nombre d'effets inutilisable, input_ff_create() - tous aboutissent à la même étiquette.
Arrêter l'appareil sur ce chemin. hid-dr.c et hid-emsff.c, qui démarrent l'appareil avec le masque HID_CONNECT_DEFAULT & ~HID_CONNECT_FF identique, effectuent déjà cette opération. Les deux goto précédents doivent continuer de renvoyer sans appeler hid_hw_stop(), car aucun des deux n'a démarré d'appareil ; il faut donc attribuer une étiquette propre au chemin qui échoue après le démarrage.
Découvert par XBOW, trié par Baul Lee
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.