diff --git a/drivers/vmxnet3.cc b/drivers/vmxnet3.cc
index a97daf99bd10303e7587cc5b6d07a15fdc499d4a..eab0679a7c9b1d170b4f97269a352f3fff75d1d5 100644
--- a/drivers/vmxnet3.cc
+++ b/drivers/vmxnet3.cc
@@ -740,7 +740,6 @@ void vmxnet3::txq_gc(vmxnet3_txqueue &txq)
 void vmxnet3::rxq_eof(vmxnet3_rxqueue &rxq)
 {
     auto &rxc = rxq.comp_ring;
-    struct mbuf *m_head = NULL, *m_tail = NULL;
 
     while(1) {
         auto rxcd = rxc.get_desc(rxc.next);
@@ -774,7 +773,7 @@ void vmxnet3::rxq_eof(vmxnet3_rxqueue &rxq)
         if (rxcd->layout->sop) {
             assert(rxd->layout->btype == VMXNET3_BTYPE_HEAD);
             assert((idx % 1) == 0);
-            assert(m_head == NULL);
+            assert(rxq.m_currpkt_head == nullptr);
 
             if (length == 0) {
                 rxq.discard(rid, idx);
@@ -792,30 +791,30 @@ void vmxnet3::rxq_eof(vmxnet3_rxqueue &rxq)
             m->M_dat.MH.MH_pkthdr.rcvif = _ifn;
             m->M_dat.MH.MH_pkthdr.csum_flags = 0;
             m->m_hdr.mh_len = length;
-            m_head = m_tail = m;
+            rxq.m_currpkt_head = rxq.m_currpkt_tail = m;
         } else {
             assert(rxd->layout->btype == VMXNET3_BTYPE_BODY);
-            assert(m_head != NULL);
+            assert(rxq.m_currpkt_head != nullptr);
 
             if (rxq.newbuf(rid) != 0) {
                 rxq.discard(rid, idx);
                 if (!rxcd->layout->eop)
                     rxq.discard_chain(rid);
-                m_freem(m_head);
+                m_freem(rxq.m_currpkt_head);
                 _rxq_stats.rx_drops++;
-                m_head = m_tail = NULL;
+                rxq.m_currpkt_head = rxq.m_currpkt_tail = nullptr;
                 goto next;
             }
 
             m->m_hdr.mh_len = length;
-            m_head->M_dat.MH.MH_pkthdr.len += length;
-            m_tail->m_hdr.mh_next = m;
-            m_tail = m;
+            rxq.m_currpkt_head->M_dat.MH.MH_pkthdr.len += length;
+            rxq.m_currpkt_tail->m_hdr.mh_next = m;
+            rxq.m_currpkt_tail = m;
         }
 
         if (rxcd->layout->eop) {
-            rxq_input(rxq, rxcd, m_head);
-            m_head = m_tail = NULL;
+            rxq_input(rxq, rxcd, rxq.m_currpkt_head);
+            rxq.m_currpkt_head = rxq.m_currpkt_tail = nullptr;
         }
 
 next:
diff --git a/drivers/vmxnet3.hh b/drivers/vmxnet3.hh
index 82ca112a3b8ecfc451bce44503abdccccc239a1b..e37b0f792b9d0c056b474cf510c3860819a8d73c 100644
--- a/drivers/vmxnet3.hh
+++ b/drivers/vmxnet3.hh
@@ -76,6 +76,9 @@ public:
     cmdRingT cmd_rings[VMXNET3_RXRINGS_PERQ];
     compRingT comp_ring;
     struct mbuf *buf[VMXNET3_RXRINGS_PERQ][VMXNET3_MAX_RX_NDESC];
+
+    struct mbuf *m_currpkt_head = nullptr;
+    struct mbuf *m_currpkt_tail = nullptr;
 };
 
 class vmxnet3 : public hw_driver {