CVE-2026-64098 in Linux정보

요약

\~에 의해 VulDB • 2026. 07. 20.

리눅스 커널에서 다음 취약점이 해결되었습니다:

drm/virtio: 플레인 업데이트에 대해 인터럽트 불가능한 resv 잠금 사용

virtio_gpu_cursor_plane_update() 및 virtio_gpu_resource_flush() 함수는 framebuffer BO의 dma_resv를 virtio_gpu_array_lock_resv()를 통해 잠그지만, 해당 반환값을 무시합니다. 이 함수는 dma_resv_lock_interruptible() 호출 중 시그널 발생으로 인해 -EINTR로 실패하거나, fence 슬롯 할당 과정에서 -ENOMEM로 실패할 수 있으며, 이로 인해 resv 잠금이 해제된 상태로 남게 됩니다. 이후 큐 경로는 객체 배열을 순회하며 dma_resv_add_fence()를 호출하는데, 이 함수는 잠금이 유지되고 있음을 요구합니다. lockdep가 활성화되어 있으면 이는 dma_resv_assert_held() 위반을 유발합니다:

WARNING: drivers/dma-buf/dma-resv.c:296 at dma_resv_add_fence+0x71e/0x840 Call Trace: virtio_gpu_array_add_fence virtio_gpu_queue_ctrl_sgs virtio_gpu_queue_fenced_ctrl_buffer virtio_gpu_cursor_plane_update drm_atomic_helper_commit_planes drm_atomic_helper_commit_tail commit_tail drm_atomic_helper_commit drm_atomic_commit drm_atomic_helper_update_plane __setplane_atomic drm_mode_cursor_universal drm_mode_cursor_common drm_mode_cursor_ioctl drm_ioctl __x64_sys_ioctl

WARN 발생 외에도, 잠금 없이 dma_resv fence 목록을 수정하면 동시 읽기/쓰기와 Race Condition이 발생할 수 있으며, 이로 인해 목록의 무결성이 손상될 수 있습니다.

두 호출 지점은 .atomic_update 플레인 콜백 내에서 실행되는데, DRM atomic 헬퍼는 이 시점(커밋이 사용자 공간에 승인된 상태이며 깔끔한 롤백 경로가 없음)에는 실패를 허용하지 않습니다. 잠금 획득을 .prepare_fb로 이동하는 것은 제안되었으나, 동일한 atomic 커밋 내의 다른 BO 잠금 경로와 교착상태(deadlock)를 유발할 수 있어 거부되었습니다.

dma_resv_lock_interruptible() 대신 dma_resv_lock()을 사용하는 virtio_gpu_lock_one_resv_uninterruptible() 함수를 도입합니다. 이를 통해 -EINTR 실패 모드(실제 syzbot 트리거 원인)는 제거하면서 커밋 전체에 걸쳐 잠금을 유지하지 않습니다. 이 헬퍼 함수는 단일 BO만 잠그며, nents > 1인 경우 -EINVAL로 거부합니다; 두 수정 지점은 정확히 하나의 BO를 잠급니다.

이를 virtio_gpu_cursor_plane_update() 및 virtio_gpu_resource_flush()에서 사용하며, dma_resv_reserve_fences()로부터의 나머지 -ENOMEM 케이스에 대한 반환값을 확인하여 objs를 해제하고 해당 프레임에 대해 플레인 업데이트를 건너뜁니다. 여기서 접촉되는 framebuffer BO들은 다른 컨텍스트와 공유되지 않으며 잠금 경합은 짧게 발생할 것으로 예상되므로, 시그널 인터럽트 가능성 상실이 허용 가능합니다.

virtio_gpu_array_lock_resv()의 기타 호출자(ioctl 경로)는 여전히 인터럽트 가능한 변형을 사용합니다.

이 버그는 syzbot에 의해 보고되었으며, DRM_IOCTL_MODE_CURSOR 경로의 결함 주입(fail_nth)을 통해 트리거되었습니다. 이는 dma_resv_reserve_fences()에서 -ENOMEM 분기를 강제합니다.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

책임이 있는

Linux

예약하다

2026. 07. 19.

모더레이션

수락

항목

VDB-380195

EPSS

0.00000

활동

낮음

출처

Do you know our Splunk app?

Download it now for free!