[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[qemu-xen master] net: forbid the reentrant RX



commit 22dc8663d9fc7baa22100544c600b6285a63c7a3
Author:     Jason Wang <jasowang@xxxxxxxxxx>
AuthorDate: Wed Jul 22 16:57:46 2020 +0800
Commit:     Jason Wang <jasowang@xxxxxxxxxx>
CommitDate: Tue Jul 28 16:57:58 2020 +0800

    net: forbid the reentrant RX
    
    The memory API allows DMA into NIC's MMIO area. This means the NIC's
    RX routine must be reentrant. Instead of auditing all the NIC, we can
    simply detect the reentrancy and return early. The queue->delivering
    is set and cleared by qemu_net_queue_deliver() for other queue helpers
    to know whether the delivering in on going (NIC's receive is being
    called). We can check it and return early in qemu_net_queue_flush() to
    forbid reentrant RX.
    
    Signed-off-by: Jason Wang <jasowang@xxxxxxxxxx>
---
 net/queue.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/net/queue.c b/net/queue.c
index 0164727e39..19e32c80fd 100644
--- a/net/queue.c
+++ b/net/queue.c
@@ -250,6 +250,9 @@ void qemu_net_queue_purge(NetQueue *queue, NetClientState 
*from)
 
 bool qemu_net_queue_flush(NetQueue *queue)
 {
+    if (queue->delivering)
+        return false;
+
     while (!QTAILQ_EMPTY(&queue->packets)) {
         NetPacket *packet;
         int ret;
--
generated by git-patchbot for /home/xen/git/qemu-xen.git#master



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.