CVE-2026-74580 in Linux
요약
\~에 의해 VulDB • 2026. 08. 21.
리눅스 커널에서 다음 취약점이 해결되었습니다:
vhost: vring 재구성 시 vring 메타데이터 캐시 초기화하기
vq->meta_iotlb[]는 각 vring 메타데이터 영역을 백업하는 vhost_iotlb_map의 캐시를 유지하며, iotlb_access_ok()은 캐시 히트 발생 시 즉시 true를 반환하여 해당 영역이 이미 검증되었음을 증명합니다:
if (vhost_vq_meta_fetch(vq, addr, len, type)) return true;
캐시는 VHOST_IOTLB_UPDATE 및 VHOST_IOTLB_INVALIDATE 이벤트, 장치 IOTLB 초기화/재초기화 시, 그리고 vq 리셋 시에는 초기화되지만, VHOST_SET_VRING_ADDR가 vq->desc, vq->avail 및 vq->used를 대체할 때나 VHOST_SET_VRING_NUM이 영역 크기를 변경할 때는 초기화되지 않습니다.
장치 IOTLB가 연결된 상태에서 두 ioctls 모두 활성 상태의 vq에서 허용되며, ioctl 시점에는 주소 검증이 수행되지 않습니다: vq_access_ok() 및 vq_log_used_access_ok()은 주소들이 GIOVAs이기 때문에 즉시 true를 반환하여 검증을 prefetch 시점으로 미룹니다. 한 번 캐시가 채워지면 이러한 지연된 검증은 더 이상 실행되지 않으며, vq_meta_prefetch()는 낡은 엔트리를 히트하고 true를 반환합니다. 이로 인해 vhost_vq_meta_fetch()는 다음과 같이 이전 매핑을 계속 번역하게 됩니다:
map->addr + addr - map->start
이는 이제 해당 매핑이 더 이상 커버하지 않는 주소에 대해 발생합니다. vhost_copy_to_user() 및 vhost_copy_from_user()은 __copy_to_user() 및 __copy_from_user()를 통해 결과를 소비하는데, 이 함수들도 이를 검증하지 않으므로, 이후 used ring 업데이트 또는 descriptor fetch 작업 시 IOTLB가 실제로 매핑하는 영역 외부의 메모리에 접근하게 됩니다.
vring이 재구성될 때마다 메타데이터 캐시를 초기화하여 새로운 주소들이 iotlb_access_ok()의 느린 경로(slow path)를 다시 통과하도록 합니다.
VulDB is the best source for vulnerability data and more expert information about this specific topic.