Skip to content

Commit 94a6f6c

Browse files
kuba-moogregkh
authored andcommitted
virtio-net: free xsk_buffs on error in virtnet_xsk_pool_enable()
[ 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]>
1 parent edd53ee commit 94a6f6c

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

56345634
hdr_dma = virtqueue_dma_map_single_attrs(sq->vq, &xsk_hdr, vi->hdr_len,
56355635
DMA_TO_DEVICE, 0);
5636-
if (virtqueue_dma_mapping_error(sq->vq, hdr_dma))
5637-
return -ENOMEM;
5636+
if (virtqueue_dma_mapping_error(sq->vq, hdr_dma)) {
5637+
err = -ENOMEM;
5638+
goto err_free_buffs;
5639+
}
56385640

56395641
err = xsk_pool_dma_map(pool, dma_dev, 0);
56405642
if (err)
@@ -5662,6 +5664,8 @@ static int virtnet_xsk_pool_enable(struct net_device *dev,
56625664
err_xsk_map:
56635665
virtqueue_dma_unmap_single_attrs(rq->vq, hdr_dma, vi->hdr_len,
56645666
DMA_TO_DEVICE, 0);
5667+
err_free_buffs:
5668+
kvfree(rq->xsk_buffs);
56655669
return err;
56665670
}
56675671

0 commit comments

Comments
 (0)