{"id":29108,"date":"2026-09-25T20:31:53","date_gmt":"2026-09-25T12:31:53","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-97952"},"modified":"2026-09-25T20:31:53","modified_gmt":"2026-09-25T12:31:53","slug":"cve-2026-97952","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-97952","title":{"rendered":"CVE-2026-97952 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nsunvdc: unmap LDC coo"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>sunvdc: unmap LDC cookies when the descriptor send fails<\/p>\n<p>__send_request() maps the request&#8217;s pages into the LDC channel&#8217;s map<br \/>\ntable (ldc_map_sg()), fills in the descriptor and marks it<br \/>\nVIO_DESC_READY before ringing the doorbell via __vdc_tx_trigger().<br \/>\nWhen the trigger fails, the error path only prints a message: the<br \/>\ndescriptor stays READY and the cookies are never unmapped. The<br \/>\nmapping is normally released in vdc_end_one() when the peer completes<br \/>\nthe descriptor &#8211; but a descriptor whose doorbell was never sent will<br \/>\nnever complete, and since dr-&gt;prod is not advanced on failure, the<br \/>\nreset path (vdc_requeue_inflight(), which walks [cons, prod)) never<br \/>\nvisits it either. The map table entries are leaked permanently.<\/p>\n<p>Since commit a11f6ca9aef9 (&#8220;sunvdc: Do not spin in an infinite loop<br \/>\nwhen vio_ldc_send() returns EAGAIN&#8221;) trigger failures occur in<br \/>\npractice under load, so every resulting I\/O error also leaks one<br \/>\nrequest&#8217;s worth of entries from the fixed-size (8192 entries per<br \/>\nchannel) map table. Because the allocator hands out contiguous<br \/>\nranges, fragmentation makes large multi-segment requests fail first<br \/>\nas the table drains, until ldc_map_sg() fails permanently and the<br \/>\ndisk is dead until reboot.<\/p>\n<p>It also makes any retry-based recovery unusable: requeuing the<br \/>\nrequest on -EAGAIN remaps the pages on every attempt, overwriting<br \/>\ndesc-&gt;cookies and orphaning the previous mapping, so the table<br \/>\ndrains at the retry rate. This is the memory exhaustion observed<br \/>\nwhen the requeue approach was first tested in October 2025.<\/p>\n<p>Roll back on failure: unmap the cookies, mark the descriptor FREE<br \/>\nagain and clear the request entry. If the trigger failed with<br \/>\n-ENOTCONN, __vdc_tx_trigger() has already reset the port, which<br \/>\ntears down and reallocates both the dring and the LDC channel<br \/>\nincluding its map table &#8211; nothing to roll back, and the stale<br \/>\ndescriptor must not be touched.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>sunvdc: unmap LDC cookies when the descriptor send fails<\/p>\n<p>__send_request() maps the request&#8217;s pages into the LDC channel&#8217;s map<br \/>\ntabl<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-29108","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/29108","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=29108"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=29108"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=29108"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}