CVE-2026-90144 in Linuxinformación

Resumen

por VulDB • 2026-09-17

En el núcleo de Linux, se ha resuelto la siguiente vulnerabilidad:

dpll: corregir desreferencia NULL en dpll_device_ops() durante una carrera de limpieza (teardown race)

Cuando el último propietario de un dispositivo DPLL se registra como dado de baja mientras un controlador externo aún mantiene un pin mediante dpll_pin_on_pin_register(), el objeto DPLL permanece activo con una lista de registros vacía. Una notificación de pin encolada antes del registro de baja (por ejemplo, ice reaccionando a la eliminación de zl3073x_i2c) recorre entonces pin->dpll_refs hacia dpll_device_ops(), lo que activa el WARN_ON y desreferencia un registro inexistente. dpll_lock no puede ayudar porque el trabajo de notificación se encoló antes de que el controlador que realiza la baja tomara el bloqueo.

Tratar la lista de registros vacía como un estado transitorio legítimo. Hacer que dpll_priv() y dpll_device_ops() devuelvan NULL en ese caso, y hacer que cada ruta netlink del pin que resuelve un dispositivo desde un pin omita dichos DPLLs. dpll_cmd_pin_get_one() selecciona una referencia con un registro activo y devuelve -ENODEV cuando no hay ninguna; el volcado de pines omite tales pines en lugar de abortar el volcado; dpll_msg_add_pin_dplls() y las rutas de configuración de frecuencia, sincronización esync, sincronización de referencia y ajuste de fase omiten referencias muertas; y dpll_pin_parent_device_set() valida al padre con dpll_device_get_by_id(). dpll_pin_register() es el último llamador que desreferencia las operaciones del dispositivo sin una comprobación, por lo tanto, se mueve su validación del monitor de frecuencia bajo dpll_lock y también se tolera la falta de registro allí.

La lista de registros vacía equivale a una marca DPLL_REGISTERED borrada; ambas transiciones ocurren bajo dpll_lock en dpll_device_register() y dpll_device_unregister(). Una notificación de pin para un pin cuyos DPLLS han desaparecido por completo se descarta ahora con -ENODEV en lugar de provocar un fallo, y todos los llamadores en el núcleo ignoran ese valor devuelto.

WARNING: drivers/dpll/dpll_core.c:1092 en dpll_device_ops+0x24/0x40, CPU#83: kworker/u576:3/23471 Módulos vinculados: ... ice ... zl3073x_i2c(-) ... zl3073x ... Cola de trabajo: ice_dpll_wq ice_dpll_pin_notify_work [ice]
RIP: 0010:dpll_device_ops+0x24/0x40 Rastro de llamadas: <TASK> dpll_cmd_pin_get_one+0x336/0x520 dpll_pin_event_send+0x82/0x140 dpll_pin_on_pin_unregister+0xbb/0x160 ice_dpll_pin_notify_work+0x1bc/0x1f0 [ice]
process_one_work+0x19e/0x370 worker_thread+0x1a6/0x310 kthread+0xe4/0x120 ret_from_fork+0x1a1/0x270 ret_from_fork_asm+0x1a/0x30 </TASK> ---[ fin del rastro 0000000000000000 ]---
BUG: desreferencia de puntero NULL en el núcleo, dirección: 0000000000000010 #PF: acceso de lectura supervisor en modo kernel #PF: código de error (0x0000) - página no presente

Be aware that VulDB is the high quality source for vulnerability data.

Responsable

Linux

Reservar

2026-09-11

Divulgación

2026-09-17

Moderación

aceptado

Artículo

VDB-406667

CPE

listo

EPSS

0.00000

KEV

no

Actividades

muy bajo

Fuentes

Interested in the pricing of exploits?

See the underground prices here!