Vulnerabilidad en kernel de Linux (CVE-2025-38350)
Gravedad:
Pendiente de análisis
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
19/07/2025
Última modificación:
22/07/2025
Descripción
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: net/sched: Siempre pasar notificaciones cuando la clase hija se vacía. Ciertas qdisc con clase pueden invocar el controlador de desencolado de sus clases en una operación de encolado. Esto puede vaciar inesperadamente la qdisc hija y, por lo tanto, hacer que una clase en vuelo sea pasiva mediante qlen_notify(). La mayoría de las qdisc no esperan este comportamiento en este momento y pueden reactivar la clase eventualmente de todos modos, lo que conducirá a un use-after-free. El commit de corrección referenciada intentó corregir este comportamiento para el caso HFSC al mover la contabilidad del backlog, aunque esto resultó ser incompleto ya que el padre de la clase padre también podría encontrarse con el problema. El siguiente reproductor demuestra este use-after-free: socat -u STDIN UDP4-DATAGRAM:127.0.0.1:8888 tc class delete dev lo classid 1:1 echo 1 | socat -u STDIN UDP4-DATAGRAM:127.0.0.1:8888 Dado que los problemas de contabilidad de atrasos que provocan un use-after-frees en punteros de clase obsoletos son un patrón recurrente en este punto, este parche adopta un enfoque diferente. En lugar de intentar corregir la contabilidad, el parche garantiza que qdisc_tree_reduce_backlog siempre llame a qlen_notify cuando la qdisc secundaria esté vacía. Esto soluciona el problema porque la eliminación de qdiscs siempre implica una llamada a qdisc_reset() o qdisc_purge_queue(), que finalmente restablece su qlen a 0, lo que provoca que el siguiente qdisc_tree_reduce_backlog() informe a la clase principal. Tenga en cuenta que esto puede llamar a qlen_notify en clases pasivas varias veces. Esto no es un problema después de la serie de parches recientes que hicieron que todos los controladores qlen_notify() de las qdiscs con clase sean idempotentes.
Impacto
Referencias a soluciones, herramientas e información
- https://git.kernel.org/stable/c/103406b38c600fec1fe375a77b27d87e314aea09
- https://git.kernel.org/stable/c/3b290923ad2b23596208c1e29520badef4356a43
- https://git.kernel.org/stable/c/7874c9c132e906a52a187d045995b115973c93fb
- https://git.kernel.org/stable/c/a44acdd9e84a211989ff4b9b92bf3545d8456ad5
- https://git.kernel.org/stable/c/a553afd91f55ff39b1e8a1c4989a29394c9e0472
- https://git.kernel.org/stable/c/e269f29e9395527bc00c213c6b15da04ebb35070
- https://git.kernel.org/stable/c/e9921b57dca05ac5f4fa1fa8e993d4f0ee52e2b7
- https://git.kernel.org/stable/c/f680a4643c6f71e758d8fe0431a958e9a6a4f59d