CVE-2022-50679

i40e: Fix DMA mappings leak

published December 9, 2025

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

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

i40e: Fix DMA mappings leak

During reallocation of RX buffers, new DMA mappings are created for

those buffers.

steps for reproduction:

while :

do

for ((i=0; i<=8160; i=i+32))

do

ethtool -G enp130s0f0 rx $i tx $i

sleep 0.5

ethtool -g enp130s0f0

done

done

This resulted in crash:

i40e 0000:01:00.1: Unable to allocate memory for the Rx descriptor ring, size=65536

Driver BUG

WARNING: CPU: 0 PID: 4300 at net/core/xdp.c:141 xdp_rxq_info_unreg+0x43/0x50

Call Trace:

i40e_free_rx_resources+0x70/0x80 [i40e]

i40e_set_ringparam+0x27c/0x800 [i40e]

ethnl_set_rings+0x1b2/0x290

genl_family_rcv_msg_doit.isra.15+0x10f/0x150

genl_family_rcv_msg+0xb3/0x160

? rings_fill_reply+0x1a0/0x1a0

genl_rcv_msg+0x47/0x90

? genl_family_rcv_msg+0x160/0x160

netlink_rcv_skb+0x4c/0x120

genl_rcv+0x24/0x40

netlink_unicast+0x196/0x230

netlink_sendmsg+0x204/0x3d0

sock_sendmsg+0x4c/0x50

__sys_sendto+0xee/0x160

? handle_mm_fault+0xbe/0x1e0

? syscall_trace_enter+0x1d3/0x2c0

__x64_sys_sendto+0x24/0x30

do_syscall_64+0x5b/0x1a0

entry_SYSCALL_64_after_hwframe+0x65/0xca

RIP: 0033:0x7f5eac8b035b

Missing register, driver bug

WARNING: CPU: 0 PID: 4300 at net/core/xdp.c:119 xdp_rxq_info_unreg_mem_model+0x69/0x140

Call Trace:

xdp_rxq_info_unreg+0x1e/0x50

i40e_free_rx_resources+0x70/0x80 [i40e]

i40e_set_ringparam+0x27c/0x800 [i40e]

ethnl_set_rings+0x1b2/0x290

genl_family_rcv_msg_doit.isra.15+0x10f/0x150

genl_family_rcv_msg+0xb3/0x160

? rings_fill_reply+0x1a0/0x1a0

genl_rcv_msg+0x47/0x90

? genl_family_rcv_msg+0x160/0x160

netlink_rcv_skb+0x4c/0x120

genl_rcv+0x24/0x40

netlink_unicast+0x196/0x230

netlink_sendmsg+0x204/0x3d0

sock_sendmsg+0x4c/0x50

__sys_sendto+0xee/0x160

? handle_mm_fault+0xbe/0x1e0

? syscall_trace_enter+0x1d3/0x2c0

__x64_sys_sendto+0x24/0x30

do_syscall_64+0x5b/0x1a0

entry_SYSCALL_64_after_hwframe+0x65/0xca

RIP: 0033:0x7f5eac8b035b

This was caused because of new buffers with different RX ring count should

substitute older ones, but those buffers were freed in

i40e_configure_rx_ring and reallocated again with i40e_alloc_rx_bi,

thus kfree on rx_bi caused leak of already mapped DMA.

Fix this by reallocating ZC with rx_bi_zc struct when BPF program loads. Additionally

reallocate back to rx_bi when BPF program unloads.

If BPF program is loaded/unloaded and XSK pools are created, reallocate

RX queues accordingly in XSP_SETUP_XSK_POOL handler.

The record
Technical detail
CVSS
Not scored
CVSS v4.0
Not supplied
EPSS
0.00244 · 14.7th percentile
Published
2025-12-09T01:29Z
EPSS history
Timeline
  • 09 DEC 01:29Z
    i40e: Fix DMA mappings leak
    cvelistv5