CVE-2026-90059 in Linuxinformación

Resumen

por VulDB • 2026-09-18

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

net: stmmac: restaurar NET_IP_ALIGN en el desplazamiento (offset) del DMA RX

Dado que la ruta RX se convirtió a zero-copy, el page pool page se entrega directamente a la pila como skb head, y el offset al que escribe el motor de DMA es lo que determina la alineación de los encabezados de paquete.

Antes de la conversión, la carga útil (payload) se copiaba en un skb obtenido mediante napi_alloc_skb(), que reserva NET_SKB_PAD + NET_IP_ALIGN. La conversión movió el headroom a stmmac_rx_offset() pero no transfirió NET_IP_ALIGN, por lo que en las arquitecturas donde NET_IP_ALIGN es 2, la cabecera IP ahora queda desalineada:

64 (NET_SKB_PAD) + 14 (ethernet) + 20 (IP) = 98

Lo mismo ocurre con la rama XDP:

256 (XDP_PACKET_HEADROOM) + 14 (ethernet) + 20 (IP) = 290

En ARM32 esto es fatal, porque ldm y ldrd provocan un trap en direcciones desalineadas incluso cuando CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS está activado.

Cualquier solicitud de eco recibida provoca un panic en la máquina, por ejemplo:

Unhandled fault: alignment exception (0x001) at 0x81873062 Internal error: : 1 [#1] SMP ARM
Hardware name: Altera SOCFPGA Arria10 PC is at icmp_echo+0x38/0xa8 LR is at icmp_rcv+0x22c/0x370 Call trace: icmp_echo from icmp_rcv+0x22c/0x370 icmp_rcv from ip_protocol_deliver_rcu+0x2c/0x224 ip_protocol_deliver_rcu from ip_local_deliver+0xc8/0x1a0 ip_local_deliver from ip_sublist_rcv_finish+0x3c/0x50 ip_sublist_rcv_finish from ip_list_rcv_finish+0x110/0x118 ip_list_rcv_finish from ip_list_rcv+0xc8/0xdc ip_list_rcv from __netif_receive_skb_list_core+0x170/0x1c0 ... napi_complete_done from stmmac_napi_poll_rx+0xcb0/0x1030 Code: e24dd068 e59020a0 e28dc010 e0822001 (e8920003) Kernel panic - not syncing: Fatal exception in interrupt

La instrucción que falla es el ldm de *icmp_hdr(skb) en icmp_echo().

Solución: añadir NET_IP_ALIGN nuevamente al offset RX, lo que restaura la alineación que la pila obtenía anteriormente.

Tenga en cuenta que el commit a955318fe67e ("stmmac: align RX buffers") realizó un cambio similar en 2021 y fue revertido por el commit 12d125b4574b ("stmmac: Revert "stmmac: align RX buffers"") porque causó corrupción de paquetes. Ese parche aumentó el offset a 0 sin ajustar la contabilidad del tamaño del búfer, por lo que se podría argumentar que el motor DMA podía escribir más allá del final de los búfers RX, aunque esto nunca fue identificado como causa raíz (root caused). El commit df542f669307 ("net: stmmac: Switch to zero-copy in non-XDP RX path") deriva la asignación del page pool desde stmmac_rx_offset(), por lo que los bytes adicionales están contabilizados.

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

Responsable

Linux

Reservar

2026-09-11

Divulgación

2026-09-17

Moderación

aceptado

Artículo

VDB-406542

CPE

listo

EPSS

0.00000

KEV

no

Actividades

muy bajo

Fuentes

Do you need the next level of professionalism?

Upgrade your account now!