Skip to content

Commit 4397684

Browse files
committed
virtio-net: free xsk_buffs on error in virtnet_xsk_pool_enable()
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]>
1 parent 1e20324 commit 4397684

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
@@ -5890,8 +5890,10 @@ static int virtnet_xsk_pool_enable(struct net_device *dev,
58905890

58915891
hdr_dma = virtqueue_dma_map_single_attrs(sq->vq, &xsk_hdr, vi->hdr_len,
58925892
DMA_TO_DEVICE, 0);
5893-
if (virtqueue_dma_mapping_error(sq->vq, hdr_dma))
5894-
return -ENOMEM;
5893+
if (virtqueue_dma_mapping_error(sq->vq, hdr_dma)) {
5894+
err = -ENOMEM;
5895+
goto err_free_buffs;
5896+
}
58955897

58965898
err = xsk_pool_dma_map(pool, dma_dev, 0);
58975899
if (err)
@@ -5919,6 +5921,8 @@ static int virtnet_xsk_pool_enable(struct net_device *dev,
59195921
err_xsk_map:
59205922
virtqueue_dma_unmap_single_attrs(rq->vq, hdr_dma, vi->hdr_len,
59215923
DMA_TO_DEVICE, 0);
5924+
err_free_buffs:
5925+
kvfree(rq->xsk_buffs);
59225926
return err;
59235927
}
59245928

0 commit comments

Comments
 (0)