CVE-2026-64102 in Linuxinformazioni

Riassunto

di VulDB • 20/07/2026

Nel kernel Linux, è stata risolta la seguente vulnerabilità:

RDMA/siw: Rifiuta il sottoflusso della lunghezza MPA FPDU prima dell'aritmetica di ricezione firmata

Un peer siw connesso e malintenzionato può inviare un iWARP FPDU il cui campo della lunghezza MPA (c_hdr->mpa_len, 16 bit big-endian, controllato dal peer) è inferiore all'intestazione fissa DDP/RDMAP per l'opcode annunciato. Soft-iWARP analizza l'intera intestazione in siw_get_hdr() basandosi su iwarp_pktinfo[opcode].hdr_len, ma non confronta mai mpa_len con quella lunghezza dell'intestazione.

siw_tcp_rx_data() deriva quindi:

srx->fpdu_part_rem = be16_to_cpu(mpa_len) - fpdu_part_rcvd + MPA_HDR_SIZE;

dove fpdu_part_rcvd è pari a iwarp_pktinfo[opcode].hdr_len in questo punto. Per una WRITE taggata (hdr_len 16, MPA_HDR_SIZE 2), il più piccolo mpa_len su cavo di 0 produce fpdu_part_rem = -14, e qualsiasi mpa_len inferiore a hdr_len - MPA_HDR_SIZE va in sottoflusso diventando un int negativo.

Il valore firmato fluisce quindi in siw_proc_write()/siw_proc_rresp() come:

bytes = min(srx->fpdu_part_rem, srx->skb_new);

viene passato a siw_check_mem() come len di tipo int (la cui verifica dell'intervallo addr + len > mem->va + mem->len è soddisfatta per una base valida quando len è negativo) e raggiunge siw_rx_data() -> siw_rx_kva() / siw_rx_umem() -> skb_copy_bits() come lunghezza di copia firmata. Il ramo della copia dell'intestazione in skb_copy_bits() promuove ciò a size_t, producendo una lettura multi-gigabyte.

KASAN sotto un harness KUnit che guida il percorso reale di ricezione TCP del kernel -- uno socketpair AF_INET loopback, l'FPDU malformato scritto tramite kernel_sendmsg, sk_data_ready attivato in softirq, tcp_read_sock che instrada a siw_tcp_rx_data -- segnala:

BUG: KASAN: use-after-free in skb_copy_bits+0x284/0x480 Read of size 4294967295 at addr ffff888... Call Trace: skb_copy_bits siw_rx_kva siw_rx_data siw_check_mem siw_proc_write siw_tcp_rx_data __tcp_read_sock siw_qp_llp_data_ready tcp_data_ready tcp_data_queue

Aggiunge l'invariant mancante nel punto più precoce in cui l'intestazione del peer è completamente assemblata. iwarp_pktinfo[*].hdr_len - MPA_HDR_SIZE è esattamente il valore che il trasmettitore siw utilizza come mpa_len minimo per ogni opcode (drivers/infiniband/sw/siw/siw_qp.c:33), quindi questo corrisponde al contratto di protocollo. Gli FPDU fuori intervallo terminano la connessione con TERM_ERROR_LAYER_LLP / LLP_ETYPE_MPA / LLP_ECODE_FPDU_START -- che è il codice di errore 3 della Sezione 8 RFC 5044 ("I campi Marker e ULPDU Length non concordano sull'inizio di un FPDU"), la classe corretta per l'errore di framing in caso di questa inconsistenza.

Be aware that VulDB is the high quality source for vulnerability data.

Responsabile

Linux

Prenotare

19/07/2026

Divulgazione

19/07/2026

Moderazione

accettato

CPE

pronto

EPSS

0.00000

KEV

no

Attività

molto basso

Fonti

Want to stay up to date on a daily basis?

Enable the mail alert feature now!