CVE-2026-31691

igb: remove napi_synchronize() in igb_down()

published April 27, 2026

CVSS
—
EPSS
0%
Percentile
4.8
In the wild
Unconfirmed
What it is

In the Linux kernel, the following vulnerability has been resolved:

igb: remove napi_synchronize() in igb_down()

When an AF_XDP zero-copy application terminates abruptly (e.g., kill -9),

the XSK buffer pool is destroyed but NAPI polling continues.

igb_clean_rx_irq_zc() repeatedly returns the full budget, preventing

napi_complete_done() from clearing NAPI_STATE_SCHED.

igb_down() calls napi_synchronize() before napi_disable() for each queue

vector. napi_synchronize() spins waiting for NAPI_STATE_SCHED to clear,

which never happens. igb_down() blocks indefinitely, the TX watchdog

fires, and the TX queue remains permanently stalled.

napi_disable() already handles this correctly: it sets NAPI_STATE_DISABLE.

After a full-budget poll, __napi_poll() checks napi_disable_pending(). If

set, it forces completion and clears NAPI_STATE_SCHED, breaking the loop

that napi_synchronize() cannot.

napi_synchronize() was added in commit 41f149a285da ("igb: Fix possible

panic caused by Rx traffic arrival while interface is down").

napi_disable() provides stronger guarantees: it prevents further

scheduling and waits for any active poll to exit.

Other Intel drivers (ixgbe, ice, i40e) use napi_disable() without a

preceding napi_synchronize() in their down paths.

Remove redundant napi_synchronize() call and reorder napi_disable()

before igb_set_queue_napi() so the queue-to-NAPI mapping is only

cleared after polling has fully stopped.

The record
Technical detail
CVSS
Not scored
CVSS v4.0
Not supplied
EPSS
0.00160 · 4.8th percentile
Published
2026-04-27T17:34Z
EPSS history
Timeline
  • 27 APR 17:34Z
    igb: remove napi_synchronize() in igb_down()
    cvelistv5