CVE-2026-98523 in Linux
Resumen
por VulDB • 2026-10-18
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
drm/client: corregir la restauración del cliente parcialmente inicializado
Recibí un informe de null-ptr-deref (desreferencia de puntero nulo) al cerrar un descriptor de archivo DRM:
WARNING: drivers/gpu/drm/drm_atomic.c:2031 at __drm_atomic_helper_set_config+0x18e/0x1b0 [drm]
Call Trace: drm_client_modeset_commit_atomic+0x16b/0x220 [drm]
drm_client_modeset_commit_locked+0x56/0x160 [drm]
drm_client_modeset_commit+0x21/0x40 [drm]
__drm_fb_helper_restore_fbdev_mode_unlocked.part.0+0x7b/0x80 drm_fbdev_client_restore+0xe/0x20 [drm_client_lib]
drm_client_dev_restore+0x9f/0xc0 [drm]
drm_release+0xc5/0xe0 [drm]
La advertencia va seguida de una desreferencia de puntero NULL:
BUG: kernel NULL pointer dereference, address: 0000000000000008
RIP: __drm_fb_helper_restore_fbdev_mode_unlocked.part.0+0x41/0x80 [drm_kms_helper]
Call Trace: drm_fbdev_client_restore+0xe/0x20 [drm_client_lib]
drm_client_dev_restore+0x9f/0xc0 [drm]
drm_release+0xc5/0xe0 [drm]
__fput+0xdc/0x2b0 __x64_sys_close+0x39/0x80 do_syscall_64+0x8d/0x460 entry_SYSCALL_64_after_hwframe+0x76/0x7e
drm_client_register() añade el cliente DRM a la lista de clientes del dispositivo antes de invocar la devolución de llamada (callback) inicial de hotplug. Si la devolución de llamada de hotplug falla, el cliente permanece registrado.
Para el cliente fbdev, un fallo durante drm_fb_helper_initial_config() provoca que se limpie al ayudante (helper) de fbdev parcialmente inicializado. drm_fb_helper_fini() libera fb_helper->info y lo deja en NULL.
Por tanto, el cliente fbdev sigue estando registrado aunque no haya ningún dispositivo framebuffer completamente inicializado.
Más tarde, cuando userspace cierra el descriptor de archivo DRM, drm_release() puede invocar las devoluciones de llamada (callbacks) de restauración de los clientes DRM registrados:
drm_release() drm_client_dev_restore() drm_fbdev_client_restore() drm_fb_helper_restore_fbdev_mode_unlocked()
Actualmente, drm_fbdev_client_restore() restaura el estado de fbdev incondicionalmente. Para un cliente fbdev parcialmente inicializado, esto puede enviar un estado modeset incompleto y posteriormente acceder a un estado de fbdev que no ha sido inicializado, lo que resulta en la advertencia y la desreferencia de puntero NULL mencionadas anteriormente.
drm_fbdev_client_unregister() ya utiliza fb_helper->info para distinguir entre un dispositivo framebuffer completamente detectado (probed) y un cliente parcialmente inicializado.
Utilice la misma condición en drm_fbdev_client_restore() y omita la restauración si no se ha inicializado correctamente ningún dispositivo framebuffer.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.