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 bpftoolUpgrade kernel-zfcpdump-develUpgrade kernel-modules-extraUpgrade kernel-zfcpdump-modulesUpgrade kernelUpgrade kernel-cross-headersUpgrade kernel-rt-debug-modulesUpgrade kernel-headersUpgrade kernel-coreUpgrade kernel-tools-libsUpgrade kernel-rtUpgrade kernel-debug-coreUpgrade kernel-debug-modulesUpgrade kernel-rt-debug-kvmUpgrade kernel-rt-modules-extraUpgrade kernel-abi-stablelistsUpgrade kernel-zfcpdumpUpgrade kernel-modulesUpgrade kernel-debug-modules-extraUpgrade kernel-zfcpdump-coreUpgrade kernel-rt-debug-coreUpgrade kernel-toolsUpgrade kernel-debugUpgrade kernel-tools-libs-develUpgrade kernel-rt-coreUpgrade kernel-develUpgrade kernel-rt-debug-develUpgrade kernel-rt-debug-modules-extraUpgrade kernel-rt-kvmUpgrade kernel-docUpgrade kernel-rt-develUpgrade python3-perfUpgrade perfUpgrade kernel-rt-debugUpgrade kernel-zfcpdump-modules-extraUpgrade kernel-debug-develUpgrade kernel-rt-modules | 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 kernel-rtNo solution existsUpgrade kernel | Aug 12, 2024 | May 17, 2024 |
| Rocky_linux | — | Upgrade bpftoolUpgrade kernel-debug-coreUpgrade kernelUpgrade kernel-tools-libsUpgrade python3-perf-debuginfoUpgrade kernel-rt-coreUpgrade kernel-rt-develUpgrade kernel-debug-debuginfoUpgrade kernel-develUpgrade kernel-rt-debug-modulesUpgrade kernel-rt-debugUpgrade kernel-cross-headersUpgrade kernel-debugUpgrade kernel-tools-debuginfoUpgrade kernel-rt-debug-debuginfoUpgrade bpftool-debuginfoUpgrade kernel-debug-modulesUpgrade kernel-toolsUpgrade kernel-rt-modules-extraUpgrade kernel-debug-modules-extraUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-rt-kvmUpgrade kernel-modules-extraUpgrade kernel-rt-debuginfo-common-x86_64Upgrade kernel-rtUpgrade kernel-rt-debug-coreUpgrade kernel-rt-debug-develUpgrade kernel-tools-libs-develUpgrade kernel-debug-develUpgrade kernel-debuginfoUpgrade perfUpgrade kernel-rt-modulesUpgrade kernel-modulesUpgrade kernel-coreUpgrade kernel-rt-debug-kvmUpgrade kernel-headersUpgrade kernel-rt-debug-modules-extraUpgrade python3-perfUpgrade kernel-rt-debuginfoUpgrade perf-debuginfo | Aug 22, 2024 | May 17, 2024 |
| Suse | — | Upgrade dtb-alteraUpgrade ocfs2-kmp-64kbUpgrade cluster-md-kmp-rtUpgrade gfs2-kmp-defaultUpgrade kernel-rt_debug-develUpgrade kernel-azure-optionalUpgrade kselftests-kmp-azureUpgrade kernel-docsUpgrade kernel-debug-vdsoUpgrade dtb-allwinnerUpgrade kernel-rt_debug-livepatch-develUpgrade dtb-xilinxUpgrade reiserfs-kmp-defaultUpgrade kernel-64kb-optionalUpgrade dlm-kmp-defaultUpgrade kernel-defaultUpgrade dtb-hisiliconUpgrade kernel-debug-develUpgrade dtb-sprdUpgrade kernel-rt-optionalUpgrade dlm-kmp-rtUpgrade kernel-rt-extraUpgrade kernel-azureUpgrade gfs2-kmp-azureUpgrade kernel-source-rtUpgrade reiserfs-kmp-64kbUpgrade kernel-default-baseUpgrade reiserfs-kmp-rtUpgrade dtb-caviumUpgrade kernel-default-livepatchUpgrade dtb-amdUpgrade kernel-default-optionalUpgrade ocfs2-kmp-defaultUpgrade dtb-mediatekUpgrade kernel-debugUpgrade kernel-develUpgrade dtb-renesasUpgrade kernel-rt-livepatchUpgrade dtb-socionextUpgrade kernel-default-livepatch-develUpgrade kernel-64kb-develUpgrade kernel-64kb-extraUpgrade kernel-source-vanillaUpgrade kernel-obs-buildUpgrade ocfs2-kmp-azureUpgrade kernel-azure-extraUpgrade kernel-kvmsmall-livepatch-develUpgrade dtb-appleUpgrade kernel-rt-develUpgrade kernel-devel-rtUpgrade kselftests-kmp-rtUpgrade dtb-nvidiaUpgrade cluster-md-kmp-64kbUpgrade gfs2-kmp-64kbUpgrade dtb-exynosUpgrade kernel-default-base-rebuildUpgrade dtb-amlogicUpgrade dtb-marvellUpgrade kernel-azure-develUpgrade kernel-kvmsmallUpgrade kernel-sourceUpgrade kernel-docs-htmlUpgrade kernel-azure-livepatch-develUpgrade kernel-64kbUpgrade cluster-md-kmp-defaultUpgrade kernel-devel-azureUpgrade dtb-broadcomUpgrade kernel-azure-vdsoUpgrade dtb-apmUpgrade reiserfs-kmp-azureUpgrade ocfs2-kmp-rtUpgrade kernel-zfcpdumpUpgrade cluster-md-kmp-azureUpgrade kernel-symsUpgrade kernel-rt_debugUpgrade kernel-kvmsmall-develUpgrade dlm-kmp-64kbUpgrade kernel-rt-vdsoUpgrade dtb-rockchipUpgrade dtb-qcomUpgrade dtb-armUpgrade dlm-kmp-azureUpgrade kernel-default-vdsoUpgrade kernel-syms-azureUpgrade kernel-rt_debug-vdsoUpgrade kernel-default-extraUpgrade kernel-64kb-livepatch-develUpgrade gfs2-kmp-rtUpgrade kernel-source-azureUpgrade dtb-freescaleUpgrade kernel-rtUpgrade dtb-lgUpgrade kselftests-kmp-64kbUpgrade kernel-rt-livepatch-develUpgrade kernel-obs-qaUpgrade kernel-kvmsmall-vdsoUpgrade dtb-amazonUpgrade kernel-default-develUpgrade kernel-debug-livepatch-develUpgrade kernel-macrosUpgrade kselftests-kmp-defaultUpgrade kernel-syms-rt | Jun 24, 2024 | May 17, 2024 |
| Ubuntu | — | Upgrade linux-image-6.8.0-1004-gkeUpgrade linux-image-azure-fdeUpgrade linux-image-awsUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-6.8.0-35-lowlatency-64kUpgrade linux-image-kvmUpgrade linux-image-6.8.0-35-lowlatencyUpgrade linux-image-ibm-classicUpgrade linux-image-raspiUpgrade linux-image-generic-lpaeUpgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-oracleUpgrade linux-image-6.8.0-35-generic-64kUpgrade linux-image-6.8.0-1006-ibmUpgrade linux-image-6.8.0-1008-azure-fdeUpgrade linux-image-6.8.0-1006-oracle-64kUpgrade linux-image-lowlatency-64kUpgrade linux-image-6.8.0-1005-raspiUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-oem-24.04Upgrade linux-image-6.8.0-1008-azureUpgrade linux-image-azureUpgrade linux-image-6.8.0-1009-awsUpgrade linux-image-6.8.0-1006-oemUpgrade linux-image-gcpUpgrade linux-image-ibmUpgrade linux-image-gkeUpgrade linux-image-oem-24.04aUpgrade linux-image-genericUpgrade linux-image-lowlatencyUpgrade linux-image-virtualUpgrade linux-image-6.8.0-1006-oracleUpgrade linux-image-oracle-64kUpgrade linux-image-generic-64kUpgrade linux-image-6.8.0-1008-gcpUpgrade linux-image-6.8.0-35-genericUpgrade linux-image-virtual-hwe-24.04 | 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