{"id":29001,"date":"2026-09-25T20:31:40","date_gmt":"2026-09-25T12:31:40","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-97569"},"modified":"2026-09-25T20:31:40","modified_gmt":"2026-09-25T12:31:40","slug":"cve-2026-97569","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-97569","title":{"rendered":"CVE-2026-97569 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nbnxt_en: Prevent queu"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>bnxt_en: Prevent queue stop with deferred completions<\/p>\n<p>When the driver receives a burst of packets, it can mark a BD with the<br \/>\nNO_CMPL bit to defer completions. The expectation is that the last<br \/>\npacket in the ring will have this bit unset and the completion generated<br \/>\nby that packet will cleanup that packet and the ones preceding it. This<br \/>\nhelps to reduce the number of completions fired.<\/p>\n<p>The suppressed completions are controlled by the driver and the number<br \/>\nof packets with suppressed completions scales with the size of the ring.<br \/>\nSW USO packets, on the other hand, have an upper bound on the maximum<br \/>\nnumber of BDs which can be consumed which does not scale with the ring<br \/>\nsize.<\/p>\n<p>So, for small rings it is possible that: a burst of packets is handed to<br \/>\nthe driver, the driver defers completions for all of the packets because<br \/>\nthe number of free descriptors stays above the threshold in the driver.<br \/>\nThen, a USO packet arrives, but the number of BDs available is not<br \/>\nenough and the USO code exits early.<\/p>\n<p>In this case, you end up in a state where the ring is full of packets<br \/>\nwith their completions suppressed, which can cause the queue to stop and<br \/>\nnever be restarted.<\/p>\n<p>Assuming default CONFIG_MAX_SKB_FRAGS, this is only possible for small<br \/>\nrings (&lt;= 457 descriptors, below the driver default value) when<br \/>\na burst of packets fills the ring, followed by a large USO packet that<br \/>\ncan&#039;t fit. For larger rings, the delta between the completion<br \/>\nsuppression threshold and the BDs required for SW USO is large enough<br \/>\nthat completions will fire and this case is unreachable.<\/p>\n<p>This issue was pointed out by Sashiko and while it seems fairly unlikely<br \/>\ngiven that the queue size must be small to trigger this, it is indeed<br \/>\npossible.<\/p>\n<p>Fix this by tracking the last BD which deferred completions and<br \/>\ncentralizing the logic for deciding when to ring the doorbell. The NO_CMPL<br \/>\nbit is now cleared in bnxt_txr_db_kick(), so every doorbell site is<br \/>\ncovered, including the SW USO early exit. This guarantees the ring always<br \/>\nends in a BD which generates a completion to clean it and wake the queue.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>bnxt_en: Prevent queue stop with deferred completions<\/p>\n<p>When the driver receives a burst of packets, it can mark a BD with the<br \/>\nNO_CM<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-29001","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/29001","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=29001"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=29001"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=29001"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}