In the Linux kernel, the following vulnerability has been resolved:
swiotlb: Fix double-allocation of slots due to broken alignment handling
Commit bbb73a103fbb ("swiotlb: fix a braino in the alignment check fix"), which was a fix for commit 0eee5ae10256 ("swiotlb: fix slot alignment checks"), causes a functional regression with vsock in a virtual machine using bouncing via a restricted DMA SWIOTLB pool.
When virtio allocates the virtqueues for the vsock device using dma_alloc_coherent(), the SWIOTLB search can return page-unaligned allocations if 'area->index' was left unaligned by a previous allocation from the buffer:
# Final address in brackets is the SWIOTLB address returned to the caller | virtio-pci 0000:00:07.0: orig_addr 0x0 alloc_size 0x2000, iotlb_align_mask 0x800 stride 0x2: got slot 1645-1649/7168 (0x98326800) | virtio-pci 0000:00:07.0: orig_addr 0x0 alloc_size 0x2000, iotlb_align_mask 0x800 stride 0x2: got slot 1649-1653/7168 (0x98328800) | virtio-pci 0000:00:07.0: orig_addr 0x0 alloc_size 0x2000, iotlb_align_mask 0x800 stride 0x2: got slot 1653-1657/7168 (0x9832a800)
This ends badly (typically buffer corruption and/or a hang) because swiotlb_alloc() is expecting a page-aligned allocation and so blindly returns a pointer to the 'struct page' corresponding to the allocation, therefore double-allocating the first half (2KiB slot) of the 4KiB page.
Fix the problem by treating the allocation alignment separately to any additional alignment requirements from the device, using the maximum of the two as the stride to search the buffer slots and taking care to ensure a minimum of page-alignment for buffers larger than a page.
This also resolves swiotlb allocation failures occuring due to the inclusion of ~PAGE_MASK in 'iotlb_align_mask' for large allocations and resulting in alignment requirements exceeding swiotlb_max_mapping_size().
CVSS Details
- CVSS 3.1 Base Score: 7.8
- CVSS 3.1 Vector: (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Alma_linux | — | Upgrade kernel-zfcpdumpUpgrade kernel-rtUpgrade kernel-rt-debug-kvmUpgrade kernel-coreUpgrade kernel-zfcpdump-develUpgrade kernel-modulesUpgrade kernel-debug-modulesUpgrade kernel-rt-debug-coreUpgrade kernel-zfcpdump-coreUpgrade kernel-cross-headersUpgrade bpftoolUpgrade kernelUpgrade kernel-rt-modules-extraUpgrade kernel-tools-libsUpgrade kernel-abi-stablelistsUpgrade kernel-rt-debug-modulesUpgrade kernel-zfcpdump-modulesUpgrade kernel-toolsUpgrade kernel-debug-coreUpgrade kernel-modules-extraUpgrade kernel-headersUpgrade kernel-debug-modules-extraUpgrade perfUpgrade kernel-rt-debugUpgrade kernel-develUpgrade kernel-debugUpgrade kernel-docUpgrade kernel-rt-kvmUpgrade kernel-zfcpdump-modules-extraUpgrade kernel-tools-libs-develUpgrade kernel-rt-coreUpgrade kernel-rt-develUpgrade python3-perfUpgrade kernel-rt-debug-modules-extraUpgrade kernel-rt-modulesUpgrade kernel-debug-develUpgrade kernel-rt-debug-devel | Aug 12, 2024 | May 17, 2024 |
| Debian | — | Upgrade linux | Jul 27, 2026 | Jul 27, 2026 |
| Oracle_linux | — | Upgrade kernel | Aug 16, 2024 | May 17, 2024 |
| Redhat_linux | — | Upgrade kernelUpgrade kernel-rtNo solution exists | Aug 12, 2024 | May 17, 2024 |
| Rocky_linux | — | Upgrade kernel-tools-debuginfoUpgrade kernel-rt-coreUpgrade kernel-modules-extraUpgrade kernel-develUpgrade kernel-rt-debug-modulesUpgrade kernel-cross-headersUpgrade kernel-debug-debuginfoUpgrade kernel-rtUpgrade kernel-debug-modules-extraUpgrade bpftool-debuginfoUpgrade kernel-rt-debugUpgrade kernel-rt-develUpgrade kernel-rt-modules-extraUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-rt-debug-coreUpgrade kernel-toolsUpgrade kernel-rt-debug-debuginfoUpgrade python3-perf-debuginfoUpgrade kernelUpgrade kernel-tools-libsUpgrade kernel-debugUpgrade bpftoolUpgrade kernel-debug-coreUpgrade kernel-debug-modulesUpgrade kernel-rt-kvmUpgrade kernel-rt-debuginfo-common-x86_64Upgrade kernel-headersUpgrade perfUpgrade kernel-rt-debug-kvmUpgrade kernel-rt-debug-modules-extraUpgrade python3-perfUpgrade kernel-rt-debuginfoUpgrade kernel-coreUpgrade perf-debuginfoUpgrade kernel-rt-modulesUpgrade kernel-tools-libs-develUpgrade kernel-rt-debug-develUpgrade kernel-modulesUpgrade kernel-debug-develUpgrade kernel-debuginfo | Aug 22, 2024 | May 17, 2024 |
| Suse | — | Upgrade kselftests-kmp-64kbUpgrade kernel-rt-livepatch-develUpgrade dtb-amazonUpgrade kernel-debug-livepatch-develUpgrade dtb-lgUpgrade kernel-rtUpgrade kernel-rt_debug-vdsoUpgrade kernel-macrosUpgrade kernel-default-develUpgrade dtb-freescaleUpgrade gfs2-kmp-rtUpgrade dlm-kmp-64kbUpgrade kernel-64kb-livepatch-develUpgrade kernel-rt_debugUpgrade kernel-syms-azureUpgrade kernel-default-extraUpgrade kernel-kvmsmall-vdsoUpgrade kernel-azure-livepatch-develUpgrade dtb-apmUpgrade kernel-azure-develUpgrade kernel-azure-vdsoUpgrade kernel-devel-azureUpgrade kernel-docs-htmlUpgrade kernel-64kbUpgrade kernel-zfcpdumpUpgrade cluster-md-kmp-azureUpgrade kernel-obs-qaUpgrade dtb-rockchipUpgrade kernel-default-vdsoUpgrade kernel-rt-vdsoUpgrade reiserfs-kmp-azureUpgrade dtb-amlogicUpgrade ocfs2-kmp-rtUpgrade kernel-kvmsmallUpgrade gfs2-kmp-64kbUpgrade kernel-default-base-rebuildUpgrade kernel-kvmsmall-develUpgrade kernel-sourceUpgrade kernel-symsUpgrade dtb-marvellUpgrade kernel-syms-rtUpgrade kselftests-kmp-defaultUpgrade dtb-qcomUpgrade kernel-source-azureUpgrade dlm-kmp-azureUpgrade dtb-armUpgrade cluster-md-kmp-defaultUpgrade dtb-exynosUpgrade dtb-broadcomUpgrade kernel-rt_debug-develUpgrade kernel-default-baseUpgrade kernel-debug-vdsoUpgrade kernel-azure-optionalUpgrade kernel-debugUpgrade dtb-amdUpgrade dtb-caviumUpgrade kernel-develUpgrade dtb-renesasUpgrade ocfs2-kmp-defaultUpgrade kernel-source-vanillaUpgrade kernel-rt-livepatchUpgrade kernel-default-livepatch-develUpgrade ocfs2-kmp-64kbUpgrade kernel-rt-optionalUpgrade gfs2-kmp-defaultUpgrade dtb-alteraUpgrade cluster-md-kmp-rtUpgrade reiserfs-kmp-64kbUpgrade kernel-source-rtUpgrade kernel-rt_debug-livepatch-develUpgrade kernel-obs-buildUpgrade kernel-docsUpgrade kernel-devel-rtUpgrade kernel-azure-extraUpgrade kernel-azureUpgrade gfs2-kmp-azureUpgrade dtb-sprdUpgrade dtb-hisiliconUpgrade dlm-kmp-rtUpgrade dlm-kmp-defaultUpgrade kernel-64kb-extraUpgrade kernel-64kb-develUpgrade dtb-socionextUpgrade dtb-nvidiaUpgrade ocfs2-kmp-azureUpgrade kselftests-kmp-rtUpgrade kernel-kvmsmall-livepatch-develUpgrade dtb-mediatekUpgrade reiserfs-kmp-rtUpgrade kernel-64kb-optionalUpgrade dtb-xilinxUpgrade kselftests-kmp-azureUpgrade kernel-default-optionalUpgrade kernel-default-livepatchUpgrade dtb-allwinnerUpgrade reiserfs-kmp-defaultUpgrade kernel-debug-develUpgrade kernel-rt-extraUpgrade kernel-defaultUpgrade cluster-md-kmp-64kbUpgrade kernel-rt-develUpgrade dtb-apple | Jun 24, 2024 | May 17, 2024 |
| Ubuntu | — | Upgrade linux-image-6.8.0-1004-gkeUpgrade linux-image-generic-lpaeUpgrade linux-image-awsUpgrade linux-image-6.8.0-1008-azure-fdeUpgrade linux-image-6.8.0-35-generic-64kUpgrade linux-image-6.8.0-35-lowlatency-64kUpgrade linux-image-oracleUpgrade linux-image-6.8.0-1006-oracle-64kUpgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-6.8.0-35-lowlatencyUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-raspiUpgrade linux-image-azure-fdeUpgrade linux-image-ibm-classicUpgrade linux-image-6.8.0-1006-ibmUpgrade linux-image-kvmUpgrade linux-image-generic-64kUpgrade linux-image-6.8.0-1008-gcpUpgrade linux-image-6.8.0-1005-raspiUpgrade linux-image-oem-24.04aUpgrade linux-image-6.8.0-35-genericUpgrade linux-image-6.8.0-1006-oracleUpgrade linux-image-virtualUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-oem-24.04Upgrade linux-image-gcpUpgrade linux-image-ibmUpgrade linux-image-6.8.0-1009-awsUpgrade linux-image-6.8.0-1006-oemUpgrade linux-image-oracle-64kUpgrade linux-image-gkeUpgrade linux-image-genericUpgrade linux-image-lowlatencyUpgrade linux-image-lowlatency-64kUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-azureUpgrade linux-image-6.8.0-1008-azure | Jul 1, 2024 | May 17, 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