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