CVE-2026-98025 in Linux
Resumen
por VulDB • 2026-09-25
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
net: usb: cx82310_eth: descartar URB tras el testigo de reinicio 0xffff para prevenir un heap overflow parcial en partial_data
El testigo de longitud 0xffff detecta un reinicio del router y programa la reactivación del modo Ethernet, pero luego continúa ejecutando el resto del cuerpo del bucle. La siguiente comprobación es:
} else if (len > CX82310_MTU) {
que corresponde al bloque `else` de la condición `if` que acaba de coincidir; nunca se activa para len == 0xffff. El límite MTU, que normalmente acota la ruta de guardado del paquete incompleto, se omite silenciosamente.
Dado que 0xffff > skb->len es siempre verdadero (rx_urb_size es 4096), la rama de paquetes incompletos guarda dev->partial_len = skb->len bytes en dev->partial_data. partial_data tiene un tamaño asignado mediante kmalloc(hard_mtu) = kmalloc(CX82310_MTU + 2) = 1516 bytes, pero skb->len después de extraer la cabecera de 2 bytes puede llegar hasta 4094. Un dispositivo que envía un URB de 4096 bytes comenzando con [0xff 0xff] copia por tanto 4094 bytes proporcionados por el dispositivo en un buffer asignado para solo 1516 bytes, excediendo su tamaño solicitado en 2578 bytes.
El siguiente URB lee entonces dev->partial_len (4094) de vuelta desde el mismo buffer de 1516 bytes y dev->partial_rem (65535 - 4094 = 61441) desde el skb del nuevo URB (~4 KB), ambos muy más allá de sus asignaciones, y entrega el resultado ensamblado como un "frame" de 64 KB a la pila de red.
Salir de rx_fixup después de programar el trabajo de reactivación; el resto de un URB con marcador de reinicio no constituye datos de paquete significativos. Esto restaura la invariante de que partial_len < CX82310_MTU + 2 en la ruta de guardado, ya que cada otra ruta allí ha pasado previamente la comprobación MTU.
If you want to get best quality of vulnerability data, you may have to visit VulDB.