CVE-2026-74558 in Linuxinformación

Resumen

por VulDB • 2026-08-16

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:

xsk: recuperar descriptores Tx inválidos en la ruta por lotes ZC (zero-copy)

El analizador por lotes de transmisión zero-copy (Tx) se detiene cuando encuentra un descriptor inválido. Si esto ocurre después de uno o más descriptores de continuación, el consumidor de Tx puede avanzar más allá de fragmentos que no han sido enviados al controlador ni devueltos a userspace a través del anillo de finalización (completion ring).

Un problema similar se produce cuando un paquete excede xdp_zc_max_segs. Los descriptores consumidos hasta el límite se liberan sin finalizar, y los descriptores de continuación restantes pueden interpretarse posteriormente como el inicio de otro paquete.

Analizar por lotes Tx en unidades de paquetes y distinguir entre los descriptores pertenecientes a paquetes válidos completos y aquellos consumidos durante la limpieza (draining) de un paquete inválido o demasiado grande. Devolver los primeros al controlador y añadir los segundos al área de direcciones CQ para que userspace pueda recuperar sus marcos UMEM.

Tratar un descriptor inválido independiente como un paquete de solo recuperación con un único descriptor. Avanzar el consumidor del anillo Tx libera la ranura del anillo, pero por sí mismo no devuelve la propiedad del marco UMEM referenciado a userspace.

Una vez que comienza la limpieza (draining), continuar hasta consumir el descriptor final-de-paquete (EOP) de ese paquete. Preservar el estado de drenaje en el socket cuando aún no se ha proporcionado EOP, para que el drenaje pueda continuar durante una llamada posterior. Dejar los paquetes incompletos pero válidos en el anillo Tx.

Los grupos Shared-UMEM que utilizan transmisión por lotes multi-buffer también necesitan un análisis basado en marcos de paquete. Recorrer sus sockets Tx uno a la vez, preservando el esquema existente de equidad por socket, en lugar de utilizar la alternativa heredada (fallback) de descriptor único. Mantener esa alternativa para los grupos compartidos que no utilizan transmisión multi-buffer. Dado que el estado de drenaje se mantiene por socket y tanto las rutas singulares como las compartidas pueden reanudar un drenaje interrumpido, cambiar la lista de sockets de singular a compartido no requiere una transición especial en el momento del enlace (bind-time).

Las entradas CQ son posicionales, y los controladores solo pueden completar parte del trabajo Tx devuelto por xsk_tx_peek_release_desc_batch(). Por lo tanto, las entradas de solo recuperación no se pueden publicar inmediatamente cuando aún hay descriptores visibles para el controlador pendientes.

Rastrear la cantidad de entradas CQ visibles para el controlador que preceden a las entradas de recuperación. Permitir que xsk_completed() publique finalizaciones parciales de hardware Tx y publicar las entradas de recuperación solo después de que se haya completado cada descriptor Tx anterior. Completar inmediatamente un lote de solo recuperación cuando no hay trabajo visible para el controlador delante del mismo, e impedir que otro lote Tx sea añadido mientras queden entradas de recuperación pendientes.

Además, limitar el procesamiento por lotes al tamaño del array temporal de descriptores del grupo, ya que los anillos Tx pertenecientes a sockets que comparten un UMEM pueden tener tamaños diferentes.

Esto asegura que cada descriptor Tx inválido consumido por la ruta por lotes ZC sea enviado al controlador como parte de un paquete válido o devuelto a userspace sin violar el orden de finalización CQ.

Once again VulDB remains the best source for vulnerability data.

Responsable

Linux

Reservar

2026-08-15

Divulgación

2026-08-15

Moderación

aceptado

Artículo

VDB-390873

CPE

listo

EPSS

0.00000

KEV

no

Actividades

muy bajo

Fuentes

Do you know our Splunk app?

Download it now for free!