summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhanzhijian <[email protected]>2026-08-20 22:45:41 +0800
committerRbb666 <[email protected]>2026-11-05 18:30:59 +0800
commit67861fa4fd74a39e1d493bb60295cd8069da7b66 (patch)
tree13a3cea295f834c038047237a2b66ab336e225ca
parente2e507c499645e69f06a717cdc5161afec1be6e1 (diff)
[drivers][virtio] Fix RX buffer leak on pbuf allocation failure
-rw-r--r--components/drivers/virtio/virtio-net.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/components/drivers/virtio/virtio-net.c b/components/drivers/virtio/virtio-net.c
index e2e1b559a6..c078425cc3 100644
--- a/components/drivers/virtio/virtio-net.c
+++ b/components/drivers/virtio/virtio-net.c
@@ -124,6 +124,19 @@ static struct pbuf *virtio_net_rx(rt_device_t dev)
if (!p)
{
+ level = rt_spin_lock_irqsave(&vnet->rx_lock);
+
+ if (!rt_virtqueue_poll(vq, packet - vnet->rx_packet))
+ {
+ rt_list_remove(&vq->user_list);
+ }
+
+ rt_virtqueue_add_inbuf(vq, packet, sizeof(*packet));
+
+ rt_virtqueue_kick(vq);
+
+ rt_spin_unlock_irqrestore(&vnet->rx_lock, level);
+
return RT_NULL;
}