Index: /trunk/src/VBox/Devices/Network/DevE1000.cpp
===================================================================
--- /trunk/src/VBox/Devices/Network/DevE1000.cpp	(revision 82684)
+++ /trunk/src/VBox/Devices/Network/DevE1000.cpp	(revision 82685)
@@ -3849,4 +3849,12 @@
             return VINF_SUCCESS;
         }
+        if (fGso && pThis->GsoCtx.u8Type == PDMNETWORKGSOTYPE_INVALID)
+        {
+            E1kLog3(("Invalid GSO context, won't allocate this packet, cb=%u %s%s\n",
+                     pThis->cbTxAlloc, pThis->fVTag ? "VLAN " : "", pThis->fGSO ? "GSO " : ""));
+            /* No valid GSO context is available, ignore this packet. */
+            pThis->cbTxAlloc = 0;
+            return VINF_SUCCESS;
+        }
 
         PPDMINETWORKUP pDrv = pThisCC->CTX_SUFF(pDrv);
@@ -4422,6 +4430,8 @@
             pThis->cbTxAlloc = RT_MIN(pThis->u32PayRemain,
                                        pThis->contextTSE.dw3.u16MSS)
-                                + pThis->contextTSE.dw3.u8HDRLEN
-                                + (pThis->fVTag ? 4 : 0);
+                                + pThis->contextTSE.dw3.u8HDRLEN;
+            /* Do not add VLAN tags to empty packets. */
+            if (pThis->fVTag && pThis->cbTxAlloc > 0)
+                pThis->cbTxAlloc += 4;
             rc = e1kXmitAllocBuf(pThis, pThisCC, false /* fGSO */);
         }
@@ -5276,5 +5286,6 @@
                 cbPacket :
                 RT_MIN(cbPacket, pThis->contextTSE.dw3.u16MSS + pThis->contextTSE.dw3.u8HDRLEN);
-            if (pThis->fVTag)
+            /* Do not add VLAN tags to empty packets. */
+            if (pThis->fVTag && pThis->cbTxAlloc > 0)
                 pThis->cbTxAlloc += 4;
             LogFlow(("%s e1kLocateTxPacket: RET true cbTxAlloc=%d cbPacket=%d%s%s\n",
