diff options
| author | hanzhijian <[email protected]> | 2026-08-20 22:45:41 +0800 |
|---|---|---|
| committer | Rbb666 <[email protected]> | 2026-11-05 18:30:59 +0800 |
| commit | 67861fa4fd74a39e1d493bb60295cd8069da7b66 (patch) | |
| tree | 13a3cea295f834c038047237a2b66ab336e225ca | |
| parent | e2e507c499645e69f06a717cdc5161afec1be6e1 (diff) | |
[drivers][virtio] Fix RX buffer leak on pbuf allocation failure
| -rw-r--r-- | components/drivers/virtio/virtio-net.c | 13 |
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; } |
