CVE-2026-74488 in Linuxinformación

Resumen

por VulDB • 2026-08-15

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

wifi: mwifiex: usar la longitud del submarco al analizar marcos A-MSDU TDLS

mwifiex_11n_dispatch_amsdu_pkt() divide un A-MSDU con ieee80211_amsdu_to_8023s() y recorre los submarcos resultantes. Para cada submarco, pasa el puntero de datos del submarco a mwifiex_process_tdls_action_frame(), pero lo empareja con skb->len, la longitud del padre A-MSDU, en lugar de rx_skb->len:

rx_skb = __skb_dequeue(&list); rx_hdr = (struct rx_packet_hdr *)rx_skb->data; if (ISSUPP_TDLS_ENABLED(priv->adapter->fw_cap_info) && ntohs(rx_hdr->eth803_hdr.h_proto) == ETH_P_TDLS) {
mwifiex_process_tdls_action_frame(priv, (u8 *)rx_hdr, skb->len); }

El padre no es una descripción válida de ese búfer y puede que ni siquiera sea memoria válida. ieee80211_amsdu_to_8023s() termina con:

if (!reuse_skb) dev_kfree_skb(skb);

y solo establece reuse_skb cuando el padre es lineal, no es un head_frag y se consume como el *último* submarco. Por lo tanto, cuando el padre no califica para su reutilización, ya ha sido liberado, y la lectura de skb->len constituye un use-after-free (uso tras liberación). Cuando se reutiliza, skb->len es la longitud del último submarco, aplicada a cada uno de los submarcos anteriores, lo que sobreestima el tamaño del búfer siempre que un submarco anterior sea más corto.

La función llamada no puede absorber una longitud incorrecta porque deriva su propio límite superior (ceiling) a partir del valor que se le proporciona. Cada tipo de marco calcula:

ies_len = len - sizeof(struct ethhdr) - TDLS_*_FIX_LEN;

y el recorrido de elementos está completamente acotado contra ese límite superior,

for (end = pos + ies_len; pos + 1 < end; pos += 2 + pos[1]) {
u8 ie_len = pos[1];

if (pos + 2 + ie_len > end) break; }

por lo que una len demasiado grande desplaza end más allá del final del submarco y el recorrido lee y copia datos más allá de él. La disposición A-MSDU es elegida por el remitente, lo que hace que la diferencia entre el último submarco y uno anterior más corto sea seleccionable remotamente. Llegar a este punto requiere soporte TDLS en el firmware y el ethertype TDLS en el submarco.

El otro llamador, mwifiex_process_rx_packet(), es correcto: pasa un puntero y una longitud que describen la misma región del búfer RX.

Pasar rx_skb->len, la longitud del submarco que se está analizando realmente.

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

Responsable

Linux

Reservar

2026-08-15

Divulgación

2026-08-15

Moderación

aceptado

Artículo

VDB-390796

CPE

listo

EPSS

0.00000

KEV

no

Actividades

bajo

Fuentes

Do you know our Splunk app?

Download it now for free!