CVE-2026-31691
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
27/04/2026
Last modified:
06/05/2026
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
igb: remove napi_synchronize() in igb_down()<br />
<br />
When an AF_XDP zero-copy application terminates abruptly (e.g., kill -9),<br />
the XSK buffer pool is destroyed but NAPI polling continues.<br />
igb_clean_rx_irq_zc() repeatedly returns the full budget, preventing<br />
napi_complete_done() from clearing NAPI_STATE_SCHED.<br />
<br />
igb_down() calls napi_synchronize() before napi_disable() for each queue<br />
vector. napi_synchronize() spins waiting for NAPI_STATE_SCHED to clear,<br />
which never happens. igb_down() blocks indefinitely, the TX watchdog<br />
fires, and the TX queue remains permanently stalled.<br />
<br />
napi_disable() already handles this correctly: it sets NAPI_STATE_DISABLE.<br />
After a full-budget poll, __napi_poll() checks napi_disable_pending(). If<br />
set, it forces completion and clears NAPI_STATE_SCHED, breaking the loop<br />
that napi_synchronize() cannot.<br />
<br />
napi_synchronize() was added in commit 41f149a285da ("igb: Fix possible<br />
panic caused by Rx traffic arrival while interface is down").<br />
napi_disable() provides stronger guarantees: it prevents further<br />
scheduling and waits for any active poll to exit.<br />
Other Intel drivers (ixgbe, ice, i40e) use napi_disable() without a<br />
preceding napi_synchronize() in their down paths.<br />
<br />
Remove redundant napi_synchronize() call and reorder napi_disable()<br />
before igb_set_queue_napi() so the queue-to-NAPI mapping is only<br />
cleared after polling has fully stopped.
Impact
Base Score 3.x
5.50
Severity 3.x
MEDIUM
Vulnerable products and versions
| CPE | From | Up to |
|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.14 (including) | 6.18.23 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.19 (including) | 6.19.13 (excluding) |
| cpe:2.3:o:linux:linux_kernel:7.0:rc1:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:7.0:rc2:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:7.0:rc3:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:7.0:rc4:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:7.0:rc5:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:7.0:rc6:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:7.0:rc7:*:*:*:*:*:* |
To consult the complete list of CPE names with products and versions, see this page



