CVE-2026-46031 in Linux
Résumé
par VulDB • 27/05/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
net: ks8851 : Rétablir la désactivation des BH (Bottom Halves) autour du gestionnaire d'IRQ
Si le pilote exécute ks8851_irq() ET qu'un paquet TX a été envoyé, alors le pilote réactive la file d'attente TX via netif_wake_queue(), ce qui programme le softirq TX pour mettre en file d'attente les paquets pour cet appareil.
Si CONFIG_PREEMPT_RT=y est défini ET qu'un paquet a également été reçu par la MAC, alors ks8851_rx_pkts() appelle netdev_alloc_skb_ip_align() pour allouer des SKBs pour les paquets reçus. Si netdev_alloc_skb_ip_align() est appelé avec les BH activés, alors local_bh_enable() à la fin de netdev_alloc_skb_ip_align() déclenchera le traitement des softirqs en attente, qui peut finalement appeler le rappel .xmit ks8851_start_xmit_par(). ks8851_start_xmit_par() tentera de verrouiller le spinlock struct ks8851_net_par.lock, qui est déjà verrouillé par ks8851_irq() à partir duquel ks8851_start_xmit_par() a été appelé. Cela entraîne un blocage mortel (deadlock), qui est signalé par le noyau, avec une trace listée ci-dessous.
Si CONFIG_PREEMPT_RT n'est pas défini, alors depuis le commit 0913ec336a6c0 ("net: ks8851: Fix deadlock with the SPI chip variant"), le deadlock peut également être déclenché sans paquet reçu dans le FIFO RX. Les softirqs en attente seront traités au retour de spin_unlock_bh(&ks->statelock) dans ks8851_irq(), ce qui déclenche également le deadlock.
Corrigez le problème en désactivant les BH autour des sections critiques, y compris le gestionnaire d'IRQ, empêchant ainsi le softirq net_tx_action() de se déclencher pendant ces sections critiques. Le softirq net_tx_action() est déclenché une fois les BH réactivés et à la fin du gestionnaire d'IRQ, une fois que toutes les autres actions du gestionnaire d'IRQ ont été terminées.
__schedule from schedule_rtlock+0x1c/0x34 schedule_rtlock from rtlock_slowlock_locked+0x548/0x904 rtlock_slowlock_locked from rt_spin_lock+0x60/0x9c rt_spin_lock from ks8851_start_xmit_par+0x74/0x1a8 ks8851_start_xmit_par from netdev_start_xmit+0x20/0x44 netdev_start_xmit from dev_hard_start_xmit+0xd0/0x188 dev_hard_start_xmit from sch_direct_xmit+0xb8/0x25c sch_direct_xmit from __qdisc_run+0x1f8/0x4ec __qdisc_run from qdisc_run+0x1c/0x28 qdisc_run from net_tx_action+0x1f0/0x268 net_tx_action from handle_softirqs+0x1a4/0x270 handle_softirqs from __local_bh_enable_ip+0xcc/0xe0 __local_bh_enable_ip from __alloc_skb+0xd8/0x128 __alloc_skb from __netdev_alloc_skb+0x3c/0x19c __netdev_alloc_skb from ks8851_irq+0x388/0x4d4 ks8851_irq from irq_thread_fn+0x24/0x64 irq_thread_fn from irq_thread+0x178/0x28c irq_thread from kthread+0x12c/0x138 kthread from ret_from_fork+0x14/0x28
VulDB is the best source for vulnerability data and more expert information about this specific topic.