In the Linux kernel, the following vulnerability has been resolved:
net: ks8851: Handle softirqs at the end of IRQ thread to fix hang
The ks8851_irq() thread may call ks8851_rx_pkts() in case there are any packets in the MAC FIFO, which calls netif_rx(). This netif_rx() implementation is guarded by local_bh_disable() and local_bh_enable(). The local_bh_enable() may call do_softirq() to run softirqs in case any are pending. One of the softirqs is net_rx_action, which ultimately reaches the driver .start_xmit callback. If that happens, the system hangs. The entire call chain is below:
ks8851_start_xmit_par from netdev_start_xmit netdev_start_xmit from dev_hard_start_xmit dev_hard_start_xmit from sch_direct_xmit sch_direct_xmit from __dev_queue_xmit __dev_queue_xmit from __neigh_update __neigh_update from neigh_update neigh_update from arp_process.constprop.0 arp_process.constprop.0 from __netif_receive_skb_one_core __netif_receive_skb_one_core from process_backlog process_backlog from __napi_poll.constprop.0 __napi_poll.constprop.0 from net_rx_action net_rx_action from __do_softirq __do_softirq from call_with_stack call_with_stack from do_softirq do_softirq from __local_bh_enable_ip __local_bh_enable_ip from netif_rx netif_rx from ks8851_irq ks8851_irq from irq_thread_fn irq_thread_fn from irq_thread irq_thread from kthread kthread from ret_from_fork
The hang happens because ks8851_irq() first locks a spinlock in ks8851_par.c ks8851_lock_par() spin_lock_irqsave(&ksp->lock, ...) and with that spinlock locked, calls netif_rx(). Once the execution reaches ks8851_start_xmit_par(), it calls ks8851_lock_par() again which attempts to claim the already locked spinlock again, and the hang happens.
Move the do_softirq() call outside of the spinlock protected section of ks8851_irq() by disabling BHs around the entire spinlock protected section of ks8851_irq() handler. Place local_bh_enable() outside of the spinlock protected section, so that it can trigger do_softirq() without the ks8851_par.c ks8851_lock_par() spinlock being held, and safely call ks8851_start_xmit_par() without attempting to lock the already locked spinlock.
Since ks8851_irq() is protected by local_bh_disable()/local_bh_enable() now, replace netif_rx() with __netif_rx() which is not duplicating the local_bh_disable()/local_bh_enable() calls.
CVSS Details
- CVSS 3.1 Base Score: 7.5
- CVSS 3.1 Vector: (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Debian | — | Upgrade linux | Jul 30, 2024 | May 20, 2024 |
| Suse | — | Upgrade kernel-rt-optionalUpgrade kernel-sourceUpgrade kernel-azure-extraUpgrade kernel-docs-htmlUpgrade kernel-rt-extraUpgrade dtb-allwinnerUpgrade ocfs2-kmp-azureUpgrade dlm-kmp-64kbUpgrade ocfs2-kmp-64kbUpgrade kernel-azureUpgrade kernel-rt_debugUpgrade kernel-rt_debug-develUpgrade kernel-64kb-livepatch-develUpgrade reiserfs-kmp-defaultUpgrade kernel-rtUpgrade kernel-64kbUpgrade dtb-alteraUpgrade dtb-caviumUpgrade reiserfs-kmp-64kbUpgrade kernel-develUpgrade gfs2-kmp-64kbUpgrade kernel-source-rtUpgrade dtb-freescaleUpgrade dtb-qcomUpgrade kernel-default-vdsoUpgrade dtb-amazonUpgrade kernel-kvmsmall-livepatch-develUpgrade gfs2-kmp-azureUpgrade kernel-default-develUpgrade kernel-rt_debug-livepatch-develUpgrade kernel-kvmsmall-vdsoUpgrade ocfs2-kmp-defaultUpgrade dtb-hisiliconUpgrade gfs2-kmp-defaultUpgrade kernel-obs-buildUpgrade dtb-sprdUpgrade kernel-kvmsmall-develUpgrade kernel-syms-azureUpgrade cluster-md-kmp-azureUpgrade dtb-marvellUpgrade kernel-source-vanillaUpgrade kselftests-kmp-64kbUpgrade kernel-devel-azureUpgrade kernel-zfcpdumpUpgrade cluster-md-kmp-rtUpgrade kernel-64kb-extraUpgrade gfs2-kmp-rtUpgrade kernel-default-livepatchUpgrade dtb-appleUpgrade dtb-exynosUpgrade dtb-lgUpgrade kernel-64kb-optionalUpgrade kernel-source-azureUpgrade kselftests-kmp-azureUpgrade kernel-debug-vdsoUpgrade kernel-rt-vdsoUpgrade dtb-amdUpgrade dtb-broadcomUpgrade kernel-azure-optionalUpgrade kernel-debug-develUpgrade kselftests-kmp-defaultUpgrade kernel-default-livepatch-develUpgrade dtb-nvidiaUpgrade dtb-renesasUpgrade kernel-symsUpgrade kselftests-kmp-rtUpgrade reiserfs-kmp-azureUpgrade kernel-obs-qaUpgrade kernel-macrosUpgrade kernel-docsUpgrade dtb-armUpgrade kernel-rt-develUpgrade kernel-azure-develUpgrade reiserfs-kmp-rtUpgrade kernel-devel-rtUpgrade kernel-kvmsmallUpgrade kernel-64kb-develUpgrade kernel-default-extraUpgrade kernel-azure-vdsoUpgrade dtb-rockchipUpgrade dtb-mediatekUpgrade dtb-amlogicUpgrade dlm-kmp-azureUpgrade kernel-syms-rtUpgrade kernel-default-baseUpgrade kernel-debugUpgrade kernel-azure-livepatch-develUpgrade dtb-socionextUpgrade ocfs2-kmp-rtUpgrade dlm-kmp-rtUpgrade dtb-xilinxUpgrade cluster-md-kmp-defaultUpgrade kernel-default-base-rebuildUpgrade dtb-apmUpgrade dlm-kmp-defaultUpgrade kernel-rt-livepatchUpgrade kernel-default-optionalUpgrade kernel-rt_debug-vdsoUpgrade cluster-md-kmp-64kbUpgrade kernel-rt-livepatch-develUpgrade kernel-defaultUpgrade kernel-debug-livepatch-devel | Jun 24, 2024 | May 20, 2024 |
| Ubuntu | — | Upgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-generic-lpaeUpgrade linux-image-oracleUpgrade linux-image-6.8.0-1010-azure-fdeUpgrade linux-image-6.8.0-1006-gkeUpgrade linux-image-6.8.0-1008-ibmUpgrade linux-image-virtualUpgrade linux-image-6.8.0-1011-awsUpgrade linux-image-awsUpgrade linux-image-6.8.0-1009-nvidiaUpgrade linux-image-6.8.0-38-lowlatencyUpgrade linux-image-6.8.0-1008-oemUpgrade linux-image-6.8.0-1007-raspiUpgrade linux-image-azure-fdeUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-6.8.0-38-generic-64kUpgrade linux-image-kvmUpgrade linux-image-6.8.0-38-lowlatency-64kUpgrade linux-image-6.8.0-1007-intelUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-ibm-classicUpgrade linux-image-genericUpgrade linux-image-ibmUpgrade linux-image-6.8.0-1010-gcpUpgrade linux-image-6.8.0-1008-oracle-64kUpgrade linux-image-gkeUpgrade linux-image-oem-24.04Upgrade linux-image-gcpUpgrade linux-image-generic-64kUpgrade linux-image-intelUpgrade linux-image-nvidiaUpgrade linux-image-oracle-64kUpgrade linux-image-6.8.0-38-genericUpgrade linux-image-6.8.0-1010-azureUpgrade linux-image-lowlatencyUpgrade linux-image-6.8.0-1009-nvidia-64kUpgrade linux-image-6.8.0-1008-oracleUpgrade linux-image-raspiUpgrade linux-image-lowlatency-64kUpgrade linux-image-oem-24.04aUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-nvidia-64kUpgrade linux-image-azure | Jul 12, 2024 | May 20, 2024 |
| Vmware Photon_os | — | Use 'tdnf update' to upgrade all packages to the latest version. | Oct 14, 2025 | May 20, 2024 |
Prioritize with Active Threat Intelligence
With curated Threat Intelligence, you can see which vulnerabilities truly put you at risk, prioritize what matters most, and act before attackers do.
Explore Intelligence Hub