CVE-2026-64450 in Linuxinformación

Resumen

por VulDB • 2026-07-25

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

tipc: corregir lectura fuera de límites en bloques Gap ACK de difusión (broadcast)

Un mensaje PROTOCOL/STATE_MSG de broadcast puede contener un registro de bloques Gap ACK en su área de datos. tipc_get_gap_ack_blks() solo verifica que el campo len del registro sea autoconsistente con sus conteos ugack_cnt/bgack_cnt (sz == struct_size(p, gacks, ugack_cnt + bgack_cnt)); no comprueba que el registro se ajuste realmente al área de datos del mensaje, msg_data_sz().

El llamador unicast tipc_link_proto_rcv() lo limita ("if (glen > dlen) break;"), pero el llamador de broadcast tipc_bcast_sync_rcv() descarta el tamaño devuelto, por lo que tipc_link_advance_transmq() copia el registro fuera del skb recibido con un conteo controlado por el atacante:

this_ga = kmemdup(ga, struct_size(ga, gacks, ga->bgack_cnt), GFP_ATOMIC);

Un vecino TIPC que negoció TIPC_GAP_ACK_BLOCK lo activa mediante un mensaje STATE_MSG de broadcast ordinario (msg_bc_ack_invalid() limpio), con tamaño tal que su área de datos es corta y transportando un registro Gap ACK con len = 0x400, bgack_cnt = 0xff y ugack_cnt = 0. Entonces len equivale a struct_size(p, gacks, 255), por lo que la comprobación de consistencia pasa y ga no es NULL; kmemdup() lee struct_size(ga, gacks, 255) = 1024 bytes fuera del skb mucho más pequeño:

BUG: KASAN: slab-out-of-bounds in kmemdup_noprof+0x48/0x60 Read of size 1024 at addr ffff0000c7030d38 by task poc864/69 Call trace: kmemdup_noprof+0x48/0x60 tipc_link_advance_transmq+0x86c/0xb80 tipc_link_bc_ack_rcv+0x19c/0x1e0 tipc_bcast_sync_rcv+0x1c4/0x2c4 tipc_rcv+0x85c/0x1340 tipc_l2_rcv_msg+0xac/0x104 The buggy address belongs to the object at ffff0000c7030d00 which belongs to the cache skbuff_small_head of size 704 The buggy address is located 56 bytes inside of allocated 704-byte region [ffff0000c7030d00, ffff0000c7030fc0)

Los bytes copiados se consumen posteriormente como valores gap/ack, pero la lectura ya está fuera de límites en kmemdup() independientemente de cómo se utilicen.

La ruta unicast STATE desecha este mensaje: "if (glen > dlen) break;" omite el resto del manejo de STATE_MSG y se libera el skb. Hacer que la ruta de broadcast también lo deseche. tipc_bcast_sync_rcv() ahora limita el registro contra msg_data_sz() y, cuando no cabe, informa ello a través de tipc_node_bc_sync_rcv() hacia tipc_rcv() para que el skb sea descartado en lugar de procesado. ga no se limpia en esta ruta: ga == NULL ya significa "par antiguo sin Selective ACK", un estado legítimo distinto.

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Responsable

Linux

Reservar

2026-07-19

Divulgación

2026-07-25

Moderación

aceptado

Artículo

VDB-383255

CPE

listo

EPSS

0.00184

KEV

no

Actividades

bajo

Fuentes

Do you want to use VulDB in your project?

Use the official API to access entries easily!