CVE-2026-98509 in Linux
요약
\~에 의해 VulDB • 2026. 10. 19.
리눅스 커널에서 다음 취약점이 해결되었습니다:
drm/virtio: 실행 버퍼(execbuffer) 실패 시 펜스 이벤트의 메모리 누수 수정
VIRTGPU_EXECBUF_RING_IDX가 사용자 공간이 폴링을 활성화한 링을 선택할 때, virtio_gpu_execbuffer_ioctl()은 drm_event_reserve_init()를 사용하여 DRM 이벤트를 예약합니다. virtio_gpu_init_submit()는 BO 핸들, 명령 버퍼, syncobj 배열 및 인-펜스(in-fence)가 처리되기 전에 이를 수행하므로, 이후의 모든 오류 경로에서는 이미 대기 중인(pending) 상태로 이벤트가 유지됩니다. 여기서는 잘못된 bo_handle 또는 펜스를 포함하지 않는 in-syncobj과 같은 단순한 인수 검증 실패도 포함됩니다.
이러한 경로에서 virtio_gpu_cleanup_submit()는 이벤트를 취소(out-fence를 삭제하기 전에) 없이 아웃-펜스(out-fence)만 해제합니다. 펜스는 방출(emitted)되지 않은 상태로 해지되며, 이로 인해 이벤트에 대한 유일한 드라이버 측 포인터도 함께 손실됩니다. DRM 파일의 닫기(close) 작업은 문제를 해결하지 못합니다. drm_events_release()는 대기 중인 이벤트를 언링크(unlink)하지만, 고아 상태(orphaned)인 이벤트에서는 실행되지 않는 이후의 드라이버 측 drm_send_event()로 해지(freeing)를 의도적으로 남겨둡니다. 따라서 할당은 영구적으로 누수됩니다.
Syzkaller를 사용하여 virtio 드라이버를 퍼징(fuzzing)하는 과정에서 발견되었습니다:
BUG: memory leak unreferenced object 0xffff88802c176e80 (size 96): comm "syz.1.367", pid 10561, jiffies 4294960122 hex dump (first 32 bytes): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ c8 6e 17 2c 80 88 ff ff 00 00 00 00 00 00 00 00 .n.,............ backtrace (crc e1973c6b): kmemleak_alloc_recursive include/linux/kmemleak.h:44 [inline]
slab_post_alloc_hook mm/slub.c:4597 [inline]
slab_alloc_node mm/slub.c:4917 [inline]
__kmalloc_cache_noprof+0x49d/0x6f0 mm/slub.c:5485 _kmalloc_noprof include/linux/slab.h:988 [inline]
_kzalloc_noprof include/linux/slab.h:1309 [inline]
virtio_gpu_fence_event_create drivers/gpu/drm/virtio/virtgpu_submit.c:282 [inline]
virtio_gpu_init_submit drivers/gpu/drm/virtio/virtgpu_submit.c:398 [inline]
virtio_gpu_execbuffer_ioctl+0xbbf/0x1aa0 drivers/gpu/drm/virtio/virtgpu_submit.c:505 drm_ioctl_kernel+0x1f4/0x3e0 drivers/gpu/drm/drm_ioctl.c:817 drm_ioctl+0x5f4/0xc70 drivers/gpu/drm/drm_ioctl.c:914 vfs_ioctl fs/ioctl.c:51 [inline]
__do_sys_ioctl fs/ioctl.c:597 [inline]
__se_sys_ioctl fs/ioctl.c:583 [inline]
__x64_sys_ioctl+0x18e/0x210 fs/ioctl.c:583 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0x116/0x800 arch/x86/entry/syscall_64.c:94 entry_SYSCALL_64_after_hwframe+0x77/0x7f
실행 버퍼 오류 경로에서 펜스를 해제하기 전에 DRM 이벤트를 취소하고 해지함으로써 수정합니다. 후행 포인터(dangling pointer)를 유지하지 않도록 취소 후에 펜스의 이벤트 포인터를 클리어합니다.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.