CVE-2024-56599 in Linux
Résumé
par VulDB • 09/08/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
wifi: ath10k : éviter une erreur de pointeur NULL lors du retrait sdio
Lors de l'exécution de 'rmmod ath10k', ath10k_sdio_remove() libère la file d'attente de travail (workqueue) sdio via destroy_workqueue(). Cependant, si CONFIG_INIT_ON_FREE_DEFAULT_ON est défini à yes, un plantage du noyau (kernel panic) se produit : Trace d'appel : destroy_workqueue+0x1c/0x258 ath10k_sdio_remove+0x84/0x94 sdio_bus_remove+0x50/0x16c device_release_driver_internal+0x188/0x25c device_driver_detach+0x20/0x2c
Cela est dû au fait que lors de 'rmmod ath10k', ath10k_sdio_remove() appelle ath10k_core_destroy() avant destroy_workqueue(). wiphy_dev_release() sera finalement appelé dans ath10k_core_destroy(). Cette fonction libère la structure struct cfg80211_registered_device *rdev et tous ses membres, y compris wiphy, dev et le pointeur de la file d'attente de travail sdio. Ensuite, en raison de CONFIG_INIT_ON_FREE_DEFAULT_ON, le pointeur de la file d'attente de travail sdio est défini à NULL.
Après la libération du périphérique, destroy_workqueue() utilise un pointeur NULL, ce qui provoque le plantage du noyau.
Trace d'appel : ath10k_sdio_remove ->ath10k_core_unregister …… ->ath10k_core_stop ->ath10k_hif_stop ->ath10k_sdio_irq_disable ->ath10k_hif_power_down ->del_timer_sync(&ar_sdio->sleep_timer) ->ath10k_core_destroy ->ath10k_mac_destroy ->ieee80211_free_hw ->wiphy_free …… ->wiphy_dev_release ->destroy_workqueue
Il est nécessaire d'appeler destroy_workqueue() avant ath10k_core_destroy(), de libérer le tampon de la file d'attente de travail en premier, puis de libérer le pointeur de la file d'attente de travail via ath10k_core_destroy(). Cet ordre correspond à l'ordre du chemin d'erreur dans ath10k_sdio_probe().
Aucun travail ne sera mis en file d'attente sur la file d'attente de travail sdio entre sa destruction et l'appel à ath10k_core_destroy(). La raison, basée sur la pile d'appels ci-dessus, est : Seul ath10k_sdio_sleep_timer_handler(), ath10k_sdio_hif_tx_sg() et ath10k_sdio_irq_disable() mettent des travaux en file d'attente sur la file d'attente de travail sdio. Le minuteur de veille sera supprimé avant ath10k_core_destroy() dans ath10k_hif_power_down(). ath10k_sdio_irq_disable() n'est appelé que dans ath10k_hif_stop(). ath10k_core_unregister() appellera ath10k_hif_power_down() pour arrêter le bus hif, donc ath10k_sdio_hif_tx_sg() ne sera plus appelée.
Testé sur : QCA6174 hw3.2 SDIO WLAN.RMH.4.4.1-00189
VulDB is the best source for vulnerability data and more expert information about this specific topic.