Skip to content

Commit 126a93f

Browse files
kuba-moosmb49
authored andcommitted
virtio-net: free xsk_buffs on error in virtnet_xsk_pool_enable()
BugLink: https://bugs.launchpad.net/bugs/2115252 [ Upstream commit 4397684 ] The selftests added to our CI by Bui Quang Minh recently reveals that there is a mem leak on the error path of virtnet_xsk_pool_enable(): unreferenced object 0xffff88800a68a000 (size 2048): comm "xdp_helper", pid 318, jiffies 4294692778 hex dump (first 32 bytes): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ backtrace (crc 0): __kvmalloc_node_noprof+0x402/0x570 virtnet_xsk_pool_enable+0x293/0x6a0 (drivers/net/virtio_net.c:5882) xp_assign_dev+0x369/0x670 (net/xdp/xsk_buff_pool.c:226) xsk_bind+0x6a5/0x1ae0 __sys_bind+0x15e/0x230 __x64_sys_bind+0x72/0xb0 do_syscall_64+0xc1/0x1d0 entry_SYSCALL_64_after_hwframe+0x77/0x7f Acked-by: Jason Wang <[email protected]> Fixes: e9f3962 ("virtio_net: xsk: rx: support fill with xsk buffer") Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]> Signed-off-by: Sasha Levin <[email protected]> CVE-2025-37955 Signed-off-by: Manuel Diewald <[email protected]> Signed-off-by: Stefan Bader <[email protected]>
1 parent 032afbe commit 126a93f

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

drivers/net/virtio_net.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5870,8 +5870,10 @@ static int virtnet_xsk_pool_enable(struct net_device *dev,
58705870

58715871
hdr_dma = virtqueue_dma_map_single_attrs(sq->vq, &xsk_hdr, vi->hdr_len,
58725872
DMA_TO_DEVICE, 0);
5873-
if (virtqueue_dma_mapping_error(sq->vq, hdr_dma))
5874-
return -ENOMEM;
5873+
if (virtqueue_dma_mapping_error(sq->vq, hdr_dma)) {
5874+
err = -ENOMEM;
5875+
goto err_free_buffs;
5876+
}
58755877

58765878
err = xsk_pool_dma_map(pool, dma_dev, 0);
58775879
if (err)
@@ -5899,6 +5901,8 @@ static int virtnet_xsk_pool_enable(struct net_device *dev,
58995901
err_xsk_map:
59005902
virtqueue_dma_unmap_single_attrs(rq->vq, hdr_dma, vi->hdr_len,
59015903
DMA_TO_DEVICE, 0);
5904+
err_free_buffs:
5905+
kvfree(rq->xsk_buffs);
59025906
return err;
59035907
}
59045908

0 commit comments

Comments
 (0)