From: Michael Brown Date: Thu, 23 Apr 2026 13:57:20 +0000 (+0100) Subject: [virtio] Fix assertion failures when interface is closed X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=1c54e7e8a454f80a77350b52d21ec5ce55ca667b;p=thirdparty%2Fipxe.git [virtio] Fix assertion failures when interface is closed The unused RX I/O buffers are currently freed without being deleted from the list, with the list head being reinitialised only after all buffers have been deleted. This triggers assertion failures due to the list integrity checks when debugging is enabled. Fix by deleting each buffer individually, so that the list structure remains valid at all times. Signed-off-by: Michael Brown --- diff --git a/src/drivers/net/virtio-net.c b/src/drivers/net/virtio-net.c index cb55ea041..e47002798 100644 --- a/src/drivers/net/virtio-net.c +++ b/src/drivers/net/virtio-net.c @@ -338,10 +338,11 @@ static void virtnet_close ( struct net_device *netdev ) { virtnet_free_virtqueues ( netdev ); /* Free rx iobufs */ - list_for_each_entry_safe ( iobuf, next_iobuf, &virtnet->rx_iobufs, list ) { + list_for_each_entry_safe ( iobuf, next_iobuf, &virtnet->rx_iobufs, + list ) { + list_del ( &iobuf->list ); free_rx_iob ( iobuf ); } - INIT_LIST_HEAD ( &virtnet->rx_iobufs ); virtnet->rx_num_iobufs = 0; }