From 1c54e7e8a454f80a77350b52d21ec5ce55ca667b Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Thu, 23 Apr 2026 14:57:20 +0100 Subject: [PATCH] [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 --- src/drivers/net/virtio-net.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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; }