{"id":41088,"date":"2026-10-19T00:32:06","date_gmt":"2026-10-18T16:32:06","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98616"},"modified":"2026-10-19T00:32:06","modified_gmt":"2026-10-18T16:32:06","slug":"cve-2026-98616","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98616","title":{"rendered":"CVE-2026-98616 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\neth: fbnic: reset num"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>eth: fbnic: reset num_napi when the napi vectors are freed<\/p>\n<p>fbn-&gt;num_napi is the count of live napi vectors, each of which owns an<br \/>\nIRQ.  The PM path had freed them without clearing the count.<br \/>\nfbnic_pm_suspend() tears the datapath down via ndo_stop() and frees the<br \/>\nIRQs, but leaves netif_running() true so resume knows to re-open.  Resume<br \/>\nrebuilds the datapath in __fbnic_pm_resume() and fbnic_reset_queues() sets<br \/>\nnum_napi and __fbnic_open() re-allocates the vectors.<\/p>\n<p>When the datapath is torn down but never rebuilt, num_napi is left<br \/>\npointing at freed vectors under 2 different scenarios:<br \/>\n &#8211; a PCIe error recovery that fails (fbnic_err_slot_reset() -&gt;<br \/>\n   __fbnic_pm_resume() returns an error -&gt; PCI_ERS_RESULT_DISCONNECT), so<br \/>\n   .resume never runs; or<br \/>\n &#8211; an __fbnic_open() that fails partway on resume and unwinds, freeing<br \/>\n   the vectors after fbnic_reset_queues() has already set num_napi.<\/p>\n<p>The netdev is then running with num_napi &gt; 0 but napi[] freed, and the<br \/>\neventual remove\/unbind close re-enters fbnic_down() -&gt; fbnic_dbg_down()<br \/>\nand dereferences the freed vectors:<br \/>\n  BUG: kernel NULL pointer dereference, address: 0000000000000210<br \/>\n  RIP: fbnic_dbg_down+0x28<\/p>\n<p>Clear num_napi when the vectors are freed: in the suspend teardown (a<br \/>\ngood resume re-establishes it before __fbnic_open()) and on the resume<br \/>\nopen failure.  A redundant ndo_stop() then walks an empty napi[].  The<br \/>\nnormal ndo_stop() down\/up cycle is untouched and keeps num_napi for the<br \/>\nnext ndo_open().<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>eth: fbnic: reset num_napi when the napi vectors are freed<\/p>\n<p>fbn-&gt;num_napi is the count of live napi vectors, each of which owns an<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-41088","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/41088","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=41088"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=41088"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=41088"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}