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