<?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>Wed, 30 Sep 2026 10:08:41 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-89533 — svcrdma: Fix offset arithmetic in read_chunk_range</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-89533</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;svcrdma: Fix offset arithmetic in read_chunk_range&lt;/p&gt;
&lt;p&gt;svc_rdma_read_chunk_range() walks a Read chunk&amp;#39;s segment list to
build a sub-range starting at byte offset and spanning length bytes
for a Position-Zero or Call chunk. Two arithmetic defects in the
per-segment loop produce wrong DMA lengths and a u32 underflow:&lt;/p&gt;
&lt;p&gt;pcl_for_each_segment(segment, chunk) {
            if (offset &amp;gt; segment-&amp;gt;rs_length) {
                    offset -= segment-&amp;gt;rs_length;
                    continue;
            }&lt;/p&gt;
&lt;p&gt;dummy.rs_handle = segment-&amp;gt;rs_handle;
            dummy.rs_length = min_t(u32, length,
                                    segment-&amp;gt;rs_length) - offset;
            dummy.rs_offset = segment-&amp;gt;rs_offset + offset;&lt;/p&gt;
&lt;p&gt;First, the skip predicate uses &amp;#39;&amp;gt;&amp;#39; instead of &amp;#39;&amp;gt;=&amp;#39;. When offset
equals the segment&amp;#39;s full rs_length, the segment is fully consumed
and should be skipped, but the loop falls through into the body.
The resulting dummy.rs_length is min_t(u32, length, rs_length) -
rs_length, which underflows to a near-UINT_MAX u32 when length is
smaller than rs_length, or is zero otherwise.&lt;/p&gt;
&lt;p&gt;Second, the length formula subtracts offset from the min_t() result
rather than from segment-&amp;gt;rs_length before the cap. For offset &amp;gt; 0
the segment&amp;#39;s residual is rs_length - offset, not rs_length, so the
cap must be applied to the residual. With the current bracketing,
whenever length is smaller than rs_length - offset the per-seg…&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;svcrdma: Fix offset arithmetic in read_chunk_range&lt;/p&gt;
&lt;p&gt;svc_rdma_read_chunk_range() walks a Read chunk&amp;#39;s segment list to
build a sub-range starting at byte offset and spanning length bytes
for a Position-Zero or Call chunk. Two arithmetic defects in the
per-segment loop produce wrong DMA lengths and a u32 underflow:&lt;/p&gt;
&lt;p&gt;pcl_for_each_segment(segment, chunk) {
            if (offset &amp;gt; segment-&amp;gt;rs_length) {
                    offset -= segment-&amp;gt;rs_length;
                    continue;
            }&lt;/p&gt;
&lt;p&gt;dummy.rs_handle = segment-&amp;gt;rs_handle;
            dummy.rs_length = min_t(u32, length,
                                    segment-&amp;gt;rs_length) - offset;
            dummy.rs_offset = segment-&amp;gt;rs_offset + offset;&lt;/p&gt;
&lt;p&gt;First, the skip predicate uses &amp;#39;&amp;gt;&amp;#39; instead of &amp;#39;&amp;gt;=&amp;#39;. When offset
equals the segment&amp;#39;s full rs_length, the segment is fully consumed
and should be skipped, but the loop falls through into the body.
The resulting dummy.rs_length is min_t(u32, length, rs_length) -
rs_length, which underflows to a near-UINT_MAX u32 when length is
smaller than rs_length, or is zero otherwise.&lt;/p&gt;
&lt;p&gt;Second, the length formula subtracts offset from the min_t() result
rather than from segment-&amp;gt;rs_length before the cap. For offset &amp;gt; 0
the segment&amp;#39;s residual is rs_length - offset, not rs_length, so the
cap must be applied to the residual. With the current bracketing,
whenever length is smaller than rs_length - offset the per-seg…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-89533</guid>
    </item>
  </channel>
</rss>
