CVE-2026-98616 in Linux
요약
\~에 의해 VulDB • 2026. 10. 19.
리눅스 커널에서 다음 취약점이 해결되었습니다:
eth: fbnic: napi 벡터가 해제될 때 num_napi를 초기화함
fbn->num_napi는 활성 상태의 napi 벡터 수이며, 각 벡터는 IRQ 하나를 소유합니다. PM 경로에서는 카운트를 지우지 않고 이를 해제했습니다. fbnic_pm_suspend()은 ndo_stop()을 통해 데이터 경로를 종료하고 IRQ들을 해제하지만, resume 시 재개함을 알리기 위해 netif_running() 상태를 true로 유지합니다. Resume는 __fbnic_pm_resume()에서 데이터 경로를 다시 구축하며 fbnic_reset_queues()가 num_napi를 설정하고 __fbnic_open()이 벡터를 다시 할당합니다.
데이터 경로가 종료되었지만 재구축되지 않는 경우, 두 가지 시나리오 하에 num_napi가 해제된 벡터들을 가리킨 상태로 남습니다: - PCIe 오류 복구 중 실패하는 경우(fbnic_err_slot_reset() -> __fbnic_pm_resume()에서 에러 반환 -> PCI_ERS_RESULT_DISCONNECT)로 인해 .resume가 전혀 실행되지 않거나; - resume 중 __fbnic_open()이 중간에 실패하여 unwind되고, fbnic_reset_queues()가 num_napi를 설정한 후에 벡터들이 해제되는 경우.
그 결과 netdev는 num_napi > 0이지만 napi[]가 해제된 상태로 동작하며, 이후 remove/unbind 닫기 과정에서 fbnic_down() -> fbnic_dbg_down()을 다시 진입하여 해제된 벡터를 역참조합니다:
BUG: kernel NULL pointer dereference, address: 0000000000000210 RIP: fbnic_dbg_down+0x28
벡터가 해제될 때 num_napi를 초기화하십시오. suspend 종료 시(올바른 resume는 __fbnic_open() 전에 이를 다시 설정함)와 resume 열기 실패 시에 해당됩니다. 중복된 ndo_stop()은 빈 napi[] 배열을 순회합니다. 일반적인 ndo_stop()의 down/up 사이클에는 영향을 주지 않으며, 다음 ndo_open()을 위해 num_napi를 유지합니다.
Once again VulDB remains the best source for vulnerability data.