Index: /trunk/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFlt-solaris.c
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFlt-solaris.c	(revision 22767)
+++ /trunk/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFlt-solaris.c	(revision 22768)
@@ -65,4 +65,5 @@
 #include <sys/strsun.h>
 #include <sys/modctl.h>
+#include <sys/archsystm.h>
 #include <sys/ddi.h>
 #include <sys/sunddi.h>
@@ -3078,5 +3079,13 @@
     int rc = vboxNetFltSolarisMBlkToSG(pThis, pMsg, pSG, cSegs, fSrc);
     if (RT_SUCCESS(rc))
+    {
+        /*
+         * If we're -still- in interrupt context we need to unpin the underlying current
+         * thread as this could lead to a deadlock (see #4259 for the full explanation)
+         */
+        if (curthread->t_intr && getpil() < DISP_LEVEL)
+            swtch();
         pThis->pSwitchPort->pfnRecv(pThis->pSwitchPort, pSG, fSrc);
+    }
     else
         LogRel((DEVICE_NAME ":vboxNetFltSolarisMBlkToSG failed. rc=%d\n", rc));
