🔍 CVE-2024-35814

7.8
CVSS Score
HIGH
2024-05-17
2026-08-04 11:17
✅ 완료

🇰🇷 한글 설명

리눅스 커널의 swiotlb 구성 요소에서 정렬 처리 오류로 인해 슬롯이 중복 할당되는 취약점이 발견되었습니다. 이로 인해 가상 머신의 vsock 장치 사용 시 버퍼 손상이나 시스템 중단(hang)이 발생할 수 있습니다.

💡 쉬운 설명

컴퓨터 메모리를 나누어 쓰는 과정에서 주소 계산이 잘못되어 같은 공간을 두 곳에 동시에 빌려주는 문제가 발생했습니다. 이로 인해 데이터가 엉키거나 컴퓨터가 멈출 수 있습니다.

🇺🇸 원문 (English)

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().

📍 영향받는 시스템

정렬 처리 오류가 포함된 특정 리눅스 커널 버전 (swiotlb 관련 패치 적용 전 버전)

⚔️ 공격 벡터

제한된 DMA SWIOTLB 풀을 사용하는 가상 머신 환경에서의 메모리 할당 조작

🛡️ 대응 방법

커널 커밋 bbb73a103fbb가 포함된 최신 리눅스 커널로 업데이트

🔧 검증 코드

출력된 커널 버전을 확인하여 해당 취약점이 해결된 최신 패치 버전인지 확인합니다.

Shell / Script
uname -r

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

💻 영향받는 소프트웨어

Linux Kernel