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 reiserfs-kmp-azureUpgrade kernel-obs-qaUpgrade kernel-kvmsmallUpgrade kernel-rt-develUpgrade kselftests-kmp-rtUpgrade dtb-nvidiaUpgrade dtb-armUpgrade kernel-symsUpgrade ocfs2-kmp-rtUpgrade kernel-default-livepatch-develUpgrade kernel-docsUpgrade kernel-default-base-rebuildUpgrade cluster-md-kmp-defaultUpgrade dtb-xilinxUpgrade dlm-kmp-defaultUpgrade dlm-kmp-rtUpgrade kernel-macrosUpgrade kselftests-kmp-defaultUpgrade kernel-azure-livepatch-develUpgrade kernel-default-baseUpgrade dlm-kmp-azureUpgrade kernel-syms-rtUpgrade dtb-apmUpgrade dtb-socionextUpgrade kernel-debug-livepatch-develUpgrade kernel-azure-develUpgrade reiserfs-kmp-rtUpgrade dtb-mediatekUpgrade dtb-rockchipUpgrade kernel-devel-rtUpgrade kernel-azure-vdsoUpgrade kernel-debugUpgrade kernel-64kb-develUpgrade kernel-default-extraUpgrade kernel-rt-livepatch-develUpgrade kernel-rt_debug-vdsoUpgrade dtb-amlogicUpgrade dtb-renesasUpgrade kernel-rt-livepatchUpgrade cluster-md-kmp-64kbUpgrade kernel-defaultUpgrade kernel-default-optionalUpgrade ocfs2-kmp-64kbUpgrade kernel-kvmsmall-vdsoUpgrade dtb-qcomUpgrade kernel-source-rtUpgrade kernel-rt_debug-livepatch-develUpgrade kernel-kvmsmall-livepatch-develUpgrade kernel-default-vdsoUpgrade cluster-md-kmp-azureUpgrade kernel-64kbUpgrade kernel-azureUpgrade kernel-64kb-livepatch-develUpgrade gfs2-kmp-64kbUpgrade gfs2-kmp-azureUpgrade ocfs2-kmp-azureUpgrade dlm-kmp-64kbUpgrade kernel-default-livepatchUpgrade kernel-zfcpdumpUpgrade gfs2-kmp-rtUpgrade kernel-devel-azureUpgrade dtb-freescaleUpgrade ocfs2-kmp-defaultUpgrade kernel-kvmsmall-develUpgrade gfs2-kmp-defaultUpgrade dtb-sprdUpgrade dtb-allwinnerUpgrade reiserfs-kmp-64kbUpgrade kernel-64kb-extraUpgrade dtb-alteraUpgrade dtb-hisiliconUpgrade dtb-caviumUpgrade dtb-marvellUpgrade dtb-appleUpgrade kernel-source-vanillaUpgrade dtb-lgUpgrade dtb-exynosUpgrade cluster-md-kmp-rtUpgrade kselftests-kmp-64kbUpgrade kernel-azure-extraUpgrade kernel-syms-azureUpgrade kernel-docs-htmlUpgrade dtb-amazonUpgrade kernel-rt-optionalUpgrade kernel-sourceUpgrade kernel-default-develUpgrade kernel-obs-buildUpgrade kernel-rt-extraUpgrade kernel-azure-optionalUpgrade kernel-64kb-optionalUpgrade kselftests-kmp-azureUpgrade dtb-broadcomUpgrade dtb-amdUpgrade kernel-rt-vdsoUpgrade kernel-debug-vdsoUpgrade kernel-debug-develUpgrade kernel-source-azureUpgrade reiserfs-kmp-defaultUpgrade kernel-rt_debug-develUpgrade kernel-rt_debugUpgrade kernel-rtUpgrade kernel-devel | Jun 24, 2024 | May 20, 2024 |
| Ubuntu | — | Upgrade linux-image-ibm-classicUpgrade linux-image-genericUpgrade linux-image-ibmUpgrade linux-image-lowlatencyUpgrade linux-image-6.8.0-38-genericUpgrade linux-image-nvidia-64kUpgrade linux-image-azureUpgrade linux-image-lowlatency-64kUpgrade linux-image-6.8.0-1009-nvidia-64kUpgrade linux-image-oem-24.04aUpgrade linux-image-generic-64kUpgrade linux-image-intelUpgrade linux-image-gkeUpgrade linux-image-6.8.0-1007-intelUpgrade linux-image-gcpUpgrade linux-image-nvidiaUpgrade linux-image-6.8.0-1010-gcpUpgrade linux-image-oem-24.04Upgrade linux-image-virtual-hwe-24.04Upgrade linux-image-6.8.0-1008-oracle-64kUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-6.8.0-1010-azureUpgrade linux-image-6.8.0-1008-oracleUpgrade linux-image-oracle-64kUpgrade linux-image-raspiUpgrade linux-image-oracleUpgrade linux-image-6.8.0-1006-gkeUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-6.8.0-1009-nvidiaUpgrade linux-image-6.8.0-1008-ibmUpgrade linux-image-azure-fdeUpgrade linux-image-6.8.0-38-generic-64kUpgrade linux-image-6.8.0-1011-awsUpgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-6.8.0-1010-azure-fdeUpgrade linux-image-virtualUpgrade linux-image-generic-lpaeUpgrade linux-image-kvmUpgrade linux-image-6.8.0-38-lowlatencyUpgrade linux-image-awsUpgrade linux-image-6.8.0-38-lowlatency-64kUpgrade linux-image-6.8.0-1007-raspiUpgrade linux-image-6.8.0-1008-oem | 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 |
Prioritise 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