{"id":21454,"date":"2026-09-12T04:31:12","date_gmt":"2026-09-11T20:31:12","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89532"},"modified":"2026-09-12T04:31:12","modified_gmt":"2026-09-11T20:31:12","slug":"cve-2026-89532","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89532","title":{"rendered":"CVE-2026-89532 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nsvcrdma: Fix pcl_for_"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>svcrdma: Fix pcl_for_each_segment for empty chunks<\/p>\n<p>When a parsed chunk list contains a chunk whose ch_segcount is zero,<br \/>\npcl_for_each_segment computes its inclusive upper bound as<br \/>\n&amp;chunk-&gt;ch_segments[ch_segcount &#8211; 1]. ch_segcount is u32, so the<br \/>\nsubtraction wraps to 0xFFFFFFFF and the bound lands far past the<br \/>\nch_segments flex array. The loop body then walks unrelated memory at<br \/>\nsizeof(struct svc_rdma_segment) stride until it faults.<\/p>\n<p>A zero-segcount chunk is reachable from the wire:<br \/>\nxdr_check_write_chunk() only rejects segcount values greater than<br \/>\nrc_maxpages, and pcl_alloc_write() links a freshly allocated chunk<br \/>\nonto rc_write_pcl\/rc_reply_pcl before its segment-fill loop runs,<br \/>\nso a Write or Reply chunk advertising zero segments leaves<br \/>\nch_segcount == 0 on the list. When the transport has negotiated<br \/>\nSend-With-Invalidate, svc_rdma_get_inv_rkey() iterates all four<br \/>\nPCLs with pcl_for_each_segment and dereferences segment-&gt;rs_handle<br \/>\non each iteration, turning the underflow into an out-of-bounds read<br \/>\nand a general protection fault.<\/p>\n<p>    xdr_check_write_list \/ xdr_check_reply_chunk<br \/>\n      pcl_alloc_write()<br \/>\n        chunk = pcl_alloc_chunk(&#8230;)  \/* ch_segcount = 0 *\/<br \/>\n        list_add_tail(&amp;chunk-&gt;ch_list, &amp;pcl-&gt;cl_chunks)<br \/>\n        \/* fill loop iterates zero times for wire segcount 0 *\/<\/p>\n<p>    svc_rdma_get_inv_rkey()<br \/>\n      pcl_for_each_chunk(rc_write_pcl)<br \/>\n        pcl_for_each_segment(segment, chunk)<br \/>\n          pos rs_handle            \/* OOB read -&gt; GPF *\/<\/p>\n<p>Fix by switching the macro to a half-open upper bound that uses<br \/>\nch_segcount directly. For ch_segcount == 0 the loop start equals the<br \/>\nloop end and the body is skipped; for ch_segcount &gt; 0 the iteration<br \/>\nrange is unchanged. All six existing call sites in<br \/>\nnet\/sunrpc\/xprtrdma\/svc_rdma_recvfrom.c and<br \/>\nnet\/sunrpc\/xprtrdma\/svc_rdma_rw.c remain correct under the new bound,<br \/>\nso no caller changes are needed.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>svcrdma: Fix pcl_for_each_segment for empty chunks<\/p>\n<p>When a parsed chunk list contains a chunk whose ch_segcount is zero,<br \/>\npcl_for_ea<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-21454","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/21454","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=21454"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=21454"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=21454"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}