CVE Catalog

CVE-2026-98616

Low risk· EPSS 5%
Published: Updated: Translated: NVD NIST

Exploitation Probability (EPSS)

Low risk
0.17%

5th percentile - higher than 5% of all known CVEs

Summary

In the Linux kernel, the fbnic Ethernet driver failed to reset num_napi when NAPI vectors were freed. As a result, when the PM path or a failed PCIe error recovery tears down the datapath without rebuilding it, num_napi remains positive while the vectors are freed, leading to a use-after-free and NULL pointer dereference in fbnic_dbg_down().

Risk Assessment

This can cause a kernel oops or panic during device removal or unbind, resulting in system or network service unavailability. Systems with fbnic NICs exposed to PCIe errors or power management issues are particularly affected.

Recommendation

Update the Linux kernel to a version containing the fix that clears num_napi when NAPI vectors are freed. If updating is not possible, avoid failed suspend/resume cycles and PCIe error recovery on fbnic devices.

Other vulnerabilities in Linux kernel

See all
Original NVD description (English source)

In the Linux kernel, the following vulnerability has been resolved: eth: fbnic: reset num_napi when the napi vectors are freed fbn->num_napi is the count of live napi vectors, each of which owns an IRQ. The PM path had freed them without clearing the count. fbnic_pm_suspend() tears the datapath down via ndo_stop() and frees the IRQs, but leaves netif_running() true so resume knows to re-open. Resume rebuilds the datapath in __fbnic_pm_resume() and fbnic_reset_queues() sets num_napi and __fbnic_open() re-allocates the vectors. When the datapath is torn down but never rebuilt, num_napi is left pointing at freed vectors under 2 different scenarios: - a PCIe error recovery that fails (fbnic_err_slot_reset() -> __fbnic_pm_resume() returns an error -> PCI_ERS_RESULT_DISCONNECT), so .resume never runs; or - an __fbnic_open() that fails partway on resume and unwinds, freeing the vectors after fbnic_reset_queues() has already set num_napi. The netdev is then running with num_napi > 0 but napi[] freed, and the eventual remove/unbind close re-enters fbnic_down() -> fbnic_dbg_down() and dereferences the freed vectors: BUG: kernel NULL pointer dereference, address: 0000000000000210 RIP: fbnic_dbg_down+0x28 Clear num_napi when the vectors are freed: in the suspend teardown (a good resume re-establishes it before __fbnic_open()) and on the resume open failure. A redundant ndo_stop() then walks an empty napi[]. The normal ndo_stop() down/up cycle is untouched and keeps num_napi for the next ndo_open().

Vulnerability data from NVD (NIST) · CISA KEV · EPSS