Index: uspace/drv/nic/virtio-net/virtio-net.c
===================================================================
--- uspace/drv/nic/virtio-net/virtio-net.c	(revision cede6f8f774fec84d9323564ee08a010e506545a)
+++ uspace/drv/nic/virtio-net/virtio-net.c	(revision b085bbaa78e8c5064b68f47becdef40fc938c43d)
@@ -90,4 +90,14 @@
 }
 
+static void virtio_net_create_buf_free_list(virtio_dev_t *vdev, uint16_t num,
+    uint16_t size, uint16_t *head)
+{
+	for (unsigned i = 0; i < size; i++) {
+		virtio_virtq_set_desc(vdev, num, i, 0, 0,
+		    VIRTQ_DESC_F_NEXT, (i + 1 == size) ? -1U : i + 1);
+	}
+	*head = 0;
+}
+
 static errno_t virtio_net_initialize(ddf_dev_t *dev)
 {
@@ -181,4 +191,12 @@
 
 	/*
+	 * Put all TX and CT buffers on a free list
+	 */
+	virtio_net_create_buf_free_list(vdev, TX_QUEUE_1, TX_BUFFERS,
+	    &virtio_net->tx_free_head);
+	virtio_net_create_buf_free_list(vdev, CT_QUEUE_1, CT_BUFFERS,
+	    &virtio_net->ct_free_head);
+
+	/*
 	 * Read the MAC address
 	 */
Index: uspace/drv/nic/virtio-net/virtio-net.h
===================================================================
--- uspace/drv/nic/virtio-net/virtio-net.h	(revision cede6f8f774fec84d9323564ee08a010e506545a)
+++ uspace/drv/nic/virtio-net/virtio-net.h	(revision b085bbaa78e8c5064b68f47becdef40fc938c43d)
@@ -57,4 +57,7 @@
 	void *ct_buf[CT_BUFFERS];
 	uintptr_t ct_buf_p[CT_BUFFERS];
+
+	uint16_t tx_free_head;
+	uint16_t ct_free_head;
 } virtio_net_t;
 
