<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Thu, 01 Oct 2026 15:40:39 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-64102 — RDMA/siw: Reject MPA FPDU length underflow before signed receive math</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-64102</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;RDMA/siw: Reject MPA FPDU length underflow before signed receive math&lt;/p&gt;
&lt;p&gt;A malicious connected siw peer can send an iWARP FPDU whose MPA length
field (c_hdr-&amp;gt;mpa_len, 16 bit big-endian, peer-controlled) is smaller
than the fixed DDP/RDMAP header for the announced opcode. Soft-iWARP
parses the full header in siw_get_hdr() based on iwarp_pktinfo[opcode]
.hdr_len, but never compares mpa_len against that header length.&lt;/p&gt;
&lt;p&gt;siw_tcp_rx_data() then derives&lt;/p&gt;
&lt;p&gt;srx-&amp;gt;fpdu_part_rem = be16_to_cpu(mpa_len) - fpdu_part_rcvd
                         + MPA_HDR_SIZE;&lt;/p&gt;
&lt;p&gt;where fpdu_part_rcvd equals iwarp_pktinfo[opcode].hdr_len at this
point. For a tagged WRITE (hdr_len 16, MPA_HDR_SIZE 2) the smallest
on-wire mpa_len of 0 yields fpdu_part_rem = -14, and any mpa_len below
hdr_len - MPA_HDR_SIZE underflows to a negative int.&lt;/p&gt;
&lt;p&gt;The signed value then flows into siw_proc_write()/siw_proc_rresp() as&lt;/p&gt;
&lt;p&gt;bytes = min(srx-&amp;gt;fpdu_part_rem, srx-&amp;gt;skb_new);&lt;/p&gt;
&lt;p&gt;is handed to siw_check_mem() as an int len (whose interval check
addr + len &amp;gt; mem-&amp;gt;va + mem-&amp;gt;len is satisfied for a valid base when
len is negative), and reaches siw_rx_data() -&amp;gt; siw_rx_kva() /
siw_rx_umem() -&amp;gt; skb_copy_bits() as a signed copy length. The header
copy branch in skb_copy_bits() promotes that to size_t, producing a
multi-gigabyte read.&lt;/p&gt;
&lt;p&gt;KASAN under a KUnit harness that drives the real kernel TCP receive
path -- a loopback AF_INET socketpair, the malformed FPDU written via
ke…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;RDMA/siw: Reject MPA FPDU length underflow before signed receive math&lt;/p&gt;
&lt;p&gt;A malicious connected siw peer can send an iWARP FPDU whose MPA length
field (c_hdr-&amp;gt;mpa_len, 16 bit big-endian, peer-controlled) is smaller
than the fixed DDP/RDMAP header for the announced opcode. Soft-iWARP
parses the full header in siw_get_hdr() based on iwarp_pktinfo[opcode]
.hdr_len, but never compares mpa_len against that header length.&lt;/p&gt;
&lt;p&gt;siw_tcp_rx_data() then derives&lt;/p&gt;
&lt;p&gt;srx-&amp;gt;fpdu_part_rem = be16_to_cpu(mpa_len) - fpdu_part_rcvd
                         + MPA_HDR_SIZE;&lt;/p&gt;
&lt;p&gt;where fpdu_part_rcvd equals iwarp_pktinfo[opcode].hdr_len at this
point. For a tagged WRITE (hdr_len 16, MPA_HDR_SIZE 2) the smallest
on-wire mpa_len of 0 yields fpdu_part_rem = -14, and any mpa_len below
hdr_len - MPA_HDR_SIZE underflows to a negative int.&lt;/p&gt;
&lt;p&gt;The signed value then flows into siw_proc_write()/siw_proc_rresp() as&lt;/p&gt;
&lt;p&gt;bytes = min(srx-&amp;gt;fpdu_part_rem, srx-&amp;gt;skb_new);&lt;/p&gt;
&lt;p&gt;is handed to siw_check_mem() as an int len (whose interval check
addr + len &amp;gt; mem-&amp;gt;va + mem-&amp;gt;len is satisfied for a valid base when
len is negative), and reaches siw_rx_data() -&amp;gt; siw_rx_kva() /
siw_rx_umem() -&amp;gt; skb_copy_bits() as a signed copy length. The header
copy branch in skb_copy_bits() promotes that to size_t, producing a
multi-gigabyte read.&lt;/p&gt;
&lt;p&gt;KASAN under a KUnit harness that drives the real kernel TCP receive
path -- a loopback AF_INET socketpair, the malformed FPDU written via
ke…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-64102</guid>
    </item>
  </channel>
</rss>
