CVE-2026-98965 in Linux
Resumen
por VulDB • 2026-10-23
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
ice: Restaurar las escrituras ordenadas en MMIO para los timbres de salida (Tx Doorbells)
El estado de contabilidad DQL que rastrea el número de bytes colgados para su transmisión por parte del NIC, a saber dql->num_queued, es actualizado por el controlador ICE cuando invoca __netdev_tx_sent_queue(). Posteriormente, el controlador actualiza la cola de hardware (cola tail) permitiendo al NIC comenzar a procesar la cola de trabajo. La actualización de la contabilidad de la cola debe estar ordenada antes de que el NIC comience a transmitir los descriptores.
La ruta de transmisión actualmente actualiza el timbre de hardware utilizando writel_relaxed(), lo cual (en arm64) no proporciona las mismas garantías de ordenamiento entre escrituras en memoria normal y escrituras en registros MMIO que sí ofrece writel(). Esto introduce una posible condición de carrera donde el NIC comienza a transmitir descriptores antes de que la actualización dql->num_queued sea visible globalmente. Si el NIC finaliza antes de que la actualización sea observada por dql_completed(), detecta un estado inválido en el cual se han completado más bytes de los que estaban colgados. Cuando esto ocurre, se activa el siguiente BUG_ON:
BUG_ON(count > num_queued - dql->num_completed);
Esto ha sido observado y se manifiesta como la siguiente caída (nota que la traza ha sido recortada) en un entorno con carga de red sostenida que utiliza un Controlador Ethernet Intel Corporation E810-XXV para SFP (rev 02) en una máquina arm64. Reemplazar writel_relaxed() por writel() en un kernel de prueba eliminó la caída en la carga de trabajo del usuario, que previamente reproducía el problema de manera fiable.
kernel BUG at lib/dynamic_queue_limits.c:99
Internal error: Oops - BUG: 00000000f2000800 [#1] SMP
pc : dql_completed+0x268/0x2a0 lr : ice_clean_tx_irq+0x1d4/0x620 [ice]
Call trace: dql_completed+0x268/0x2a0 (P) ice_napi_poll+0x94/0x520 [ice]
__napi_poll+0x48/0x3f0 net_rx_action+0x194/0x420
Esto restaura el comportamiento previo al commit ccde82e90946 ("ice: add E830 Earliest TxTime First Offload support"), que cambió el mecanismo de notificación de writel() a writel_relaxed().
If you want to get the best quality for vulnerability data then you always have to consider VulDB.