{"id":15074,"date":"2026-09-04T19:02:24","date_gmt":"2026-09-04T11:02:24","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-64102"},"modified":"2026-09-04T19:02:24","modified_gmt":"2026-09-04T11:02:24","slug":"cve-2026-64102","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-64102","title":{"rendered":"CVE-2026-64102 [CRITICAL] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nRDMA\/siw: Reject MPA"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>RDMA\/siw: Reject MPA FPDU length underflow before signed receive math<\/p>\n<p>A malicious connected siw peer can send an iWARP FPDU whose MPA length<br \/>\nfield (c_hdr-&gt;mpa_len, 16 bit big-endian, peer-controlled) is smaller<br \/>\nthan the fixed DDP\/RDMAP header for the announced opcode. Soft-iWARP<br \/>\nparses the full header in siw_get_hdr() based on iwarp_pktinfo[opcode]<br \/>\n.hdr_len, but never compares mpa_len against that header length.<\/p>\n<p>siw_tcp_rx_data() then derives<\/p>\n<p>    srx-&gt;fpdu_part_rem = be16_to_cpu(mpa_len) &#8211; fpdu_part_rcvd<br \/>\n                         + MPA_HDR_SIZE;<\/p>\n<p>where fpdu_part_rcvd equals iwarp_pktinfo[opcode].hdr_len at this<br \/>\npoint. For a tagged WRITE (hdr_len 16, MPA_HDR_SIZE 2) the smallest<br \/>\non-wire mpa_len of 0 yields fpdu_part_rem = -14, and any mpa_len below<br \/>\nhdr_len &#8211; MPA_HDR_SIZE underflows to a negative int.<\/p>\n<p>The signed value then flows into siw_proc_write()\/siw_proc_rresp() as<\/p>\n<p>    bytes = min(srx-&gt;fpdu_part_rem, srx-&gt;skb_new);<\/p>\n<p>is handed to siw_check_mem() as an int len (whose interval check<br \/>\naddr + len &gt; mem-&gt;va + mem-&gt;len is satisfied for a valid base when<br \/>\nlen is negative), and reaches siw_rx_data() -&gt; siw_rx_kva() \/<br \/>\nsiw_rx_umem() -&gt; skb_copy_bits() as a signed copy length. The header<br \/>\ncopy branch in skb_copy_bits() promotes that to size_t, producing a<br \/>\nmulti-gigabyte read.<\/p>\n<p>KASAN under a KUnit harness that drives the real kernel TCP receive<br \/>\npath &#8212; a loopback AF_INET socketpair, the malformed FPDU written via<br \/>\nkernel_sendmsg, sk_data_ready firing in softirq, tcp_read_sock<br \/>\ndispatching to siw_tcp_rx_data &#8212; reports:<\/p>\n<p>    BUG: KASAN: use-after-free in skb_copy_bits+0x284\/0x480<br \/>\n    Read of size 4294967295 at addr ffff888&#8230;<br \/>\n    Call Trace:<br \/>\n     skb_copy_bits<br \/>\n     siw_rx_kva<br \/>\n     siw_rx_data<br \/>\n     siw_check_mem<br \/>\n     siw_proc_write<br \/>\n     siw_tcp_rx_data<br \/>\n     __tcp_read_sock<br \/>\n     siw_qp_llp_data_ready<br \/>\n     tcp_data_ready<br \/>\n     tcp_data_queue<\/p>\n<p>Add the missing invariant at the earliest point where the peer header<br \/>\nis fully assembled. iwarp_pktinfo[*].hdr_len &#8211; MPA_HDR_SIZE is exactly<br \/>\nthe value the siw transmitter uses as the minimum mpa_len for each<br \/>\nopcode (drivers\/infiniband\/sw\/siw\/siw_qp.c:33), so this matches the<br \/>\nprotocol contract. Out-of-range FPDUs terminate the connection with<br \/>\nTERM_ERROR_LAYER_LLP \/ LLP_ETYPE_MPA \/ LLP_ECODE_FPDU_START &#8212; which<br \/>\nis RFC 5044 Section 8 error code 3 (&#8220;Marker and ULPDU Length fields<br \/>\ndo not agree on the start of an FPDU&#8221;), the correct framing-error<br \/>\nclass for this inconsistency.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>RDMA\/siw: Reject MPA FPDU length underflow before signed receive math<\/p>\n<p>A malicious connected siw peer can send an iWARP FPDU whose <\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-15074","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/15074","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=15074"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=15074"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=15074"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}