CVE-2026-97975 in Linux
Resumen
por VulDB • 2026-09-25
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
Bluetooth: hci_sysfs: Corrección de una desreferencia de puntero NULL en device_del()
Se produce una desreferencia de puntero NULL en klist_put() cuando un dispositivo secundario (como un dispositivo de red BNEP en bnep_session) se está desregistrando concurrentemente mientras que hci_conn_del_sysfs() reparenta los dispositivos hijos.
Esto es causado por una condición de carrera entre hci_conn_del_sysfs() y el desregistro concurrente del dispositivo hijo (por ejemplo, bnep_session llamando a unregister_netdev()). Durante el desregistro del dispositivo, device_del() captura un puntero padre no NULL. Concurrentemente, hci_conn_del_sysfs() encuentra el dispositivo secundario usando device_find_any_child() y llama a device_move() para reparentearlo a NULL, lo que elimina el nodo de la klist de su padre y borra knode_parent. Posteriormente, device_del() llama a klist_del(&dev->p->knode_parent) utilizando la instantánea obsoleta del padre, lo que provoca que klist_put() desreferencie knode_klist(n)->put en un nodo ya eliminado, resultando en una desreferencia de puntero NULL.
Esta condición de carrera fue introducida por el commit 27aabf27fd01 ("Bluetooth: fix use-after-free in device_for_each_child()"), que reemplazó device_find_child(..., __match_tty) con device_find_any_child() en hci_conn_del_sysfs(). Ese cambio tenía la intención de evitar un uso-después-de-liberación (use-after-free) donde conn->dev sobrevivía a su padre hdev->dev cuando los dispositivos hijos mantenían referencias a conn->dev, ya que conn->dev solo mantenía una referencia a hdev->dev mientras estaba registrado en sysfs.
Se corrige el problema adecuadamente tomando una referencia explícita al dispositivo padre con get_device(&hdev->dev) en hci_conn_init_sysfs() y liberándola con put_device(parent) en bt_link_release() cuando se libera el dispositivo conn. Esto asegura que hdev->dev permanezca válido durante todo el ciclo de vida de conn->dev, resolviendo la vulnerabilidad subyacente de uso-después-de-liberación (use-after-free). Con la referencia al padre mantenida correctamente, se restaura el filtro __match_tty en hci_conn_del_sysfs() para que device_move() solo se invoque en dispositivos TTY RFCOMM persistentes como originalmente se pretendía, eliminando así la condición de carrera con los desregistros de dispositivos de red.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.