In the Linux kernel, the following vulnerability has been resolved:
xen/events: close evtchn after mapping cleanup
shutdown_pirq and startup_pirq are not taking the irq_mapping_update_lock because they can't due to lock inversion. Both are called with the irq_desc->lock being taking. The lock order, however, is first irq_mapping_update_lock and then irq_desc->lock.
This opens multiple races: - shutdown_pirq can be interrupted by a function that allocates an event channel:
CPU0 CPU1 shutdown_pirq { xen_evtchn_close(e) __startup_pirq { EVTCHNOP_bind_pirq -> returns just freed evtchn e set_evtchn_to_irq(e, irq) } xen_irq_info_cleanup() { set_evtchn_to_irq(e, -1) } }
Assume here event channel e refers here to the same event channel number. After this race the evtchn_to_irq mapping for e is invalid (-1).
- __startup_pirq races with __unbind_from_irq in a similar way. Because __startup_pirq doesn't take irq_mapping_update_lock it can grab the evtchn that __unbind_from_irq is currently freeing and cleaning up. In this case even though the event channel is allocated, its mapping can be unset in evtchn_to_irq.
The fix is to first cleanup the mappings and then close the event channel. In this way, when an event channel gets allocated it's potential previous evtchn_to_irq mappings are guaranteed to be unset already. This is also the reverse order of the allocation where first the event channel is allocated and then the mappings are setup.
On a 5.10 kernel prior to commit 3fcdaf3d7634 ("xen/events: modify internal [un]bind interfaces"), we hit a BUG like the following during probing of NVMe devices. The issue is that during nvme_setup_io_queues, pci_free_irq is called for every device which results in a call to shutdown_pirq. With many nvme devices it's therefore likely to hit this race during boot because there will be multiple calls to shutdown_pirq and startup_pirq are running potentially in parallel.
------------[ cut here ]------------ blkfront: xvda: barrier or flush: disabled; persistent grants: enabled; indirect descriptors: enabled; bounce buffer: enabled kernel BUG at drivers/xen/events/events_base.c:499! invalid opcode: 0000 [#1] SMP PTI CPU: 44 PID: 375 Comm: kworker/u257:23 Not tainted 5.10.201-191.748.amzn2.x86_64 #1 Hardware name: Xen HVM domU, BIOS 4.11.amazon 08/24/2006 Workqueue: nvme-reset-wq nvme_reset_work RIP: 0010:bind_evtchn_to_cpu+0xdf/0xf0 Code: 5d 41 5e c3 cc cc cc cc 44 89 f7 e8 2b 55 ad ff 49 89 c5 48 85 c0 0f 84 64 ff ff ff 4c 8b 68 30 41 83 fe ff 0f 85 60 ff ff ff <0f> 0b 66 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 0f 1f 44 00 00 RSP: 0000:ffffc9000d533b08 EFLAGS: 00010046 RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000006 RDX: 0000000000000028 RSI: 00000000ffffffff RDI: 00000000ffffffff RBP: ffff888107419680 R08: 0000000000000000 R09: ffffffff82d72b00 R10: 0000000000000000 R11: 0000000000000000 R12: 00000000000001ed R13: 0000000000000000 R14: 00000000ffffffff R15: 0000000000000002 FS: 0000000000000000(0000) GS:ffff88bc8b500000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000000000000000 CR3: 0000000002610001 CR4: 00000000001706e0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Call Trace: ? show_trace_log_lvl+0x1c1/0x2d9 ? show_trace_log_lvl+0x1c1/0x2d9 ? set_affinity_irq+0xdc/0x1c0 ? __die_body.cold+0x8/0xd ? die+0x2b/0x50 ? do_trap+0x90/0x110 ? bind_evtchn_to_cpu+0xdf/0xf0 ? do_error_trap+0x65/0x80 ? bind_evtchn_to_cpu+0xdf/0xf0 ? exc_invalid_op+0x4e/0x70 ? bind_evtchn_to_cpu+0xdf/0xf0 ? asm_exc_invalid_op+0x12/0x20 ? bind_evtchn_to_cpu+0xdf/0x ---truncated---
CVSS Details
- CVSS 3.1 Base Score: 5.5
- CVSS 3.1 Vector: (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Amazon Linux Ami 2 | — | Upgrade python-perf-debuginfoUpgrade kernel-develUpgrade kernel-tools-develUpgrade kernel-livepatch-4.14.336-257.566Upgrade perf-debuginfoUpgrade kernel-livepatch-5.10.209-198.858Upgrade kernel-headersUpgrade kernel-debuginfo-common-aarch64Upgrade perfUpgrade kernel-tools-debuginfoUpgrade kernel-toolsUpgrade kernelUpgrade kernel-debuginfoUpgrade kernel-livepatch-5.15.156-102.160Upgrade bpftool-debuginfoUpgrade bpftoolUpgrade python-perfUpgrade kernel-debuginfo-common-x86_64 | Dec 12, 2024 | Apr 3, 2024 |
| Amazon_linux_2023 | — | Upgrade kernel-livepatch-6.1.82-99.168Upgrade kernel-libbpfUpgrade kernel-modules-extraUpgrade kernel-tools-debuginfoUpgrade perf-debuginfoUpgrade kernel-debuginfoUpgrade kernel-develUpgrade kernel-headersUpgrade perfUpgrade kernel-debuginfo-common-aarch64Upgrade bpftool-debuginfoUpgrade kernel-modules-extra-commonUpgrade python3-perfUpgrade bpftoolUpgrade python3-perf-debuginfoUpgrade kernel-libbpf-develUpgrade kernel-toolsUpgrade kernel-tools-develUpgrade kernel-libbpf-staticUpgrade kernelUpgrade kernel-debuginfo-common-x86_64 | Feb 17, 2025 | Apr 3, 2024 |
| Debian | — | Upgrade linux | May 8, 2024 | Apr 3, 2024 |
| Huawei Euleros 2_0_sp10 | — | Upgrade kernel-tools-libsUpgrade kernelUpgrade kernel-toolsUpgrade kernel-abi-stablelistsUpgrade python3-perf | Jul 16, 2024 | Apr 3, 2024 |
| Huawei Euleros 2_0_sp12 | — | Upgrade bpftoolUpgrade kernel-tools-libsUpgrade kernel-toolsUpgrade python3-perfUpgrade kernel-abi-stablelistsUpgrade kernel | Oct 8, 2024 | Apr 3, 2024 |
| Huawei Euleros 2_0_sp9 | — | Upgrade kernel-toolsUpgrade python3-perfUpgrade kernelUpgrade kernel-tools-libs | Jul 17, 2024 | Apr 3, 2024 |
| Redhat_linux | — | No solution exists | Jul 9, 2025 | Apr 3, 2024 |
| Suse | — | Upgrade kernel-rt-optionalUpgrade kernel-default-manUpgrade dtb-broadcomUpgrade gfs2-kmp-azureUpgrade dtb-amazonUpgrade dtb-nvidiaUpgrade dtb-qcomUpgrade ocfs2-kmp-defaultUpgrade cluster-md-kmp-64kbUpgrade dtb-exynosUpgrade dtb-sprdUpgrade kernel-defaultUpgrade kernel-default-livepatchUpgrade kernel-azure-develUpgrade kernel-kvmsmall-livepatch-develUpgrade dtb-rockchipUpgrade kernel-rt_debugUpgrade dtb-marvellUpgrade dtb-lgUpgrade kernel-default-base-rebuildUpgrade dtb-appleUpgrade kernel-kvmsmall-vdsoUpgrade kernel-rt_debug-livepatch-develUpgrade reiserfs-kmp-64kbUpgrade kselftests-kmp-64kbUpgrade ocfs2-kmp-64kbUpgrade dtb-socionextUpgrade kernel-azureUpgrade kernel-source-rtUpgrade kernel-azure-extraUpgrade gfs2-kmp-defaultUpgrade kernel-docs-htmlUpgrade kernel-default-baseUpgrade kernel-azure-baseUpgrade dlm-kmp-64kbUpgrade kernel-64kb-extraUpgrade kernel-source-azureUpgrade kernel-debug-vdsoUpgrade dtb-allwinnerUpgrade dtb-caviumUpgrade kernel-azure-livepatch-develUpgrade kernel-rt-vdsoUpgrade kernel-rtUpgrade kernel-rt_debug-develUpgrade dlm-kmp-rtUpgrade dtb-alteraUpgrade kernel-rt-livepatch-develUpgrade dtb-freescaleUpgrade reiserfs-kmp-rtUpgrade kernel-azure-optionalUpgrade kernel-azure-vdsoUpgrade kernel-rt-extraUpgrade kernel-obs-buildUpgrade kernel-source-vanillaUpgrade kernel-syms-rtUpgrade kselftests-kmp-azureUpgrade gfs2-kmp-rtUpgrade kernel-default-develUpgrade dtb-armUpgrade dtb-amlogicUpgrade dtb-hisiliconUpgrade dlm-kmp-defaultUpgrade dtb-amdUpgrade kernel-64kb-optionalUpgrade kernel-64kb-develUpgrade kernel-kvmsmallUpgrade cluster-md-kmp-rtUpgrade reiserfs-kmp-azureUpgrade kernel-kvmsmall-develUpgrade kernel-rt-livepatchUpgrade kernel-debug-livepatch-develUpgrade kernel-syms-azureUpgrade kselftests-kmp-defaultUpgrade kernel-64kbUpgrade dtb-renesasUpgrade cluster-md-kmp-azureUpgrade ocfs2-kmp-azureUpgrade kselftests-kmp-rtUpgrade kernel-sourceUpgrade reiserfs-kmp-defaultUpgrade kernel-docsUpgrade kernel-obs-qaUpgrade kernel-default-optionalUpgrade dtb-mediatekUpgrade dtb-apmUpgrade kernel-zfcpdumpUpgrade kernel-debugUpgrade kernel-develUpgrade kernel-devel-azureUpgrade kernel-macrosUpgrade cluster-md-kmp-defaultUpgrade kernel-rt-develUpgrade kernel-symsUpgrade kernel-default-livepatch-develUpgrade gfs2-kmp-64kbUpgrade ocfs2-kmp-rtUpgrade kernel-64kb-livepatch-develUpgrade kernel-debug-develUpgrade kernel-default-vdsoUpgrade kernel-rt_debug-vdsoUpgrade kernel-devel-rtUpgrade kernel-default-extraUpgrade dlm-kmp-azureUpgrade dtb-xilinx | May 15, 2024 | Apr 3, 2024 |
| Ubuntu | — | Upgrade linux-image-generic-64k-hwe-20.04Upgrade linux-image-5.15.0-116-lowlatency-64kUpgrade linux-image-gkeop-5.4Upgrade linux-image-5.4.0-1127-oracleUpgrade linux-image-4.15.0-228-lowlatencyUpgrade linux-image-oracle-lts-20.04Upgrade linux-image-azure-lts-18.04Upgrade linux-image-5.15.0-1060-intel-iotgUpgrade linux-image-azure-lts-22.04Upgrade linux-image-azure-lts-20.04Upgrade linux-image-5.4.0-189-lowlatencyUpgrade linux-image-gke-5.15Upgrade linux-image-gkeopUpgrade linux-image-5.15.0-116-lowlatencyUpgrade linux-image-gcp-lts-22.04Upgrade linux-image-oem-20.04Upgrade linux-image-4.4.0-1135-awsUpgrade linux-image-azure-fde-lts-22.04Upgrade linux-image-5.15.0-116-generic-lpaeUpgrade linux-image-5.15.0-1065-gcpUpgrade linux-image-4.15.0-1180-azureUpgrade linux-image-generic-lpaeUpgrade linux-image-5.4.0-189-generic-lpaeUpgrade linux-image-nvidiaUpgrade linux-image-5.15.0-1062-kvmUpgrade linux-image-5.15.0-1068-azureUpgrade linux-image-4.4.0-1173-awsUpgrade linux-image-oem-osp1Upgrade linux-image-aws-lts-18.04Upgrade linux-image-5.15.0-1058-raspiUpgrade linux-image-virtual-hwe-16.04Upgrade linux-image-5.15.0-116-generic-64kUpgrade linux-image-lowlatency-hwe-18.04Upgrade linux-image-oemUpgrade linux-image-lowlatency-64kUpgrade linux-image-raspiUpgrade linux-image-5.4.0-1112-raspiUpgrade linux-image-genericUpgrade linux-image-xilinx-zynqmpUpgrade linux-image-ibmUpgrade linux-image-generic-64kUpgrade linux-image-gcp-lts-18.04Upgrade linux-image-intel-iotgUpgrade linux-image-lowlatency-hwe-20.04Upgrade linux-image-oem-20.04bUpgrade linux-image-ibm-lts-20.04Upgrade linux-image-intelUpgrade linux-image-gkeUpgrade linux-image-azureUpgrade linux-image-5.4.0-1132-gcpUpgrade linux-image-snapdragon-hwe-18.04Upgrade linux-image-oem-20.04cUpgrade linux-image-lowlatencyUpgrade linux-image-lowlatency-hwe-16.04Upgrade linux-image-generic-lts-xenialUpgrade linux-image-5.4.0-1095-gkeopUpgrade linux-image-5.4.0-1047-xilinx-zynqmpUpgrade linux-image-4.15.0-1134-oracleUpgrade linux-image-5.4.0-189-genericUpgrade linux-image-5.15.0-1064-gcpUpgrade linux-image-bluefieldUpgrade linux-image-generic-hwe-16.04Upgrade linux-image-oracle-lts-22.04Upgrade linux-image-generic-lpae-hwe-20.04Upgrade linux-image-lowlatency-lts-xenialUpgrade linux-image-5.15.0-1068-azure-fdeUpgrade linux-image-5.15.0-1035-xilinx-zynqmpUpgrade linux-image-awsUpgrade linux-image-4.4.0-258-lowlatencyUpgrade linux-image-virtual-hwe-20.04Upgrade linux-image-lowlatency-64k-hwe-20.04Upgrade linux-image-aws-lts-22.04Upgrade linux-image-nvidia-lowlatencyUpgrade linux-image-5.15.0-1063-oracleUpgrade linux-image-5.15.0-1062-gkeUpgrade linux-image-generic-hwe-18.04Upgrade linux-image-4.15.0-228-genericUpgrade linux-image-5.4.0-1040-iotUpgrade linux-image-4.4.0-1136-kvmUpgrade linux-image-5.4.0-1128-awsUpgrade linux-image-oracle-lts-18.04Upgrade linux-image-5.15.0-116-genericUpgrade linux-image-5.15.0-1060-nvidiaUpgrade linux-image-4.15.0-1165-gcpUpgrade linux-image-4.15.0-1172-awsUpgrade linux-image-azure-fdeUpgrade linux-image-virtual-lts-xenialUpgrade linux-image-gcp-lts-20.04Upgrade linux-image-gcpUpgrade linux-image-4.15.0-1155-kvmUpgrade linux-image-5.15.0-1065-awsUpgrade linux-image-oem-20.04dUpgrade linux-image-virtualUpgrade linux-image-kvmUpgrade linux-image-azure-cvmUpgrade linux-image-gkeop-5.15Upgrade linux-image-5.4.0-1088-bluefieldUpgrade linux-image-4.4.0-258-genericUpgrade linux-image-aws-lts-20.04Upgrade linux-image-5.15.0-1048-gkeopUpgrade linux-image-5.15.0-1058-ibmUpgrade linux-image-aws-hweUpgrade linux-image-oracleUpgrade linux-image-generic-hwe-20.04Upgrade linux-image-raspi-hwe-18.04Upgrade linux-image-5.4.0-1116-kvmUpgrade linux-image-5.15.0-1060-nvidia-lowlatencyUpgrade linux-image-5.4.0-1133-azureUpgrade linux-image-5.4.0-1075-ibmUpgrade linux-image-raspi-nolpaeUpgrade linux-image-raspi2Upgrade linux-image-virtual-hwe-18.04 | Jul 15, 2024 | Apr 3, 2024 |
| Vmware Photon_os | — | Use 'tdnf update' to upgrade all packages to the latest version. | Jan 20, 2025 | Apr 3, 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