CVE-2026-98509 in Linuxinformación

Resumen

por VulDB • 2026-10-18

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:

drm/virtio: corrige una fuga de memoria del evento de señalización (fence) en caso de fallo durante execbuffer

virtio_gpu_execbuffer_ioctl() reserva un DRM event con drm_event_reserve_init() cuando VIRTGPU_EXECBUF_RING_IDX selecciona un anillo para el cual userspace ha habilitado la espera activa (polling). virtio_gpu_init_submit() realiza esta operación antes de procesar los manejadores BO, el buffer de comandos, las matrices syncobj y la señalización entrante (in-fence), por lo que cada ruta posterior de error se ejecuta con el evento ya pendiente, incluidas fallas simples en la validación de argumentos como un bo_handle no válido o una sincronización en syncobj que no contiene ninguna fence.

En esas rutas virtio_gpu_cleanup_submit() libera la señalización saliente (out-fence) sin cancelar el evento. La fence se libera sin haber sido emitida nunca, llevándose consigo el único puntero del lado del controlador al evento. Cerrar el archivo DRM no ayuda. drm_events_release() desvincula los eventos pendientes pero deja deliberadamente la liberación para que sea realizada posteriormente por drm_send_event() del controlador, lo cual nunca se ejecuta para un evento huérfano, provocando una fuga permanente de la asignación.

Se detectó al realizar fuzzing del controlador virtio con Syzkaller:

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

Solución mediante la cancelación y liberación del DRM event en la ruta de error de execbuffer antes de liberar la fence. Se limpia el puntero al evento de la fence después de la cancelación para evitar que retenga un puntere colgante (dangling pointer).

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

Responsable

Linux

Reservar

2026-09-25

Divulgación

2026-10-18

Moderación

aceptado

Artículo

VDB-422220

EPSS

0.00200

KEV

no

Actividades

muy bajo

Fuentes

Want to stay up to date on a daily basis?

Enable the mail alert feature now!