Index: trunk/src/VBox/HostDrivers/VBoxNetFlt/freebsd/Makefile
===================================================================
--- trunk/src/VBox/HostDrivers/VBoxNetFlt/freebsd/Makefile	(revision 36190)
+++ trunk/src/VBox/HostDrivers/VBoxNetFlt/freebsd/Makefile	(revision 36385)
@@ -19,5 +19,5 @@
 KMOD = vboxnetflt
 
-CFLAGS += -DRT_OS_FREEBSD -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DVBOX -DRT_WITH_VBOX -Iinclude -I. -Ir0drv -w -DVBOX_WITH_HARDENING
+CFLAGS += -DRT_OS_FREEBSD -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DVBOX -DRT_WITH_VBOX -Iinclude -I. -Ir0drv -w -DVBOX_WITH_HARDENING -DVIMAGE
 
 .if (${MACHINE_ARCH} == "i386")
Index: trunk/src/VBox/HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c
===================================================================
--- trunk/src/VBox/HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c	(revision 36190)
+++ trunk/src/VBox/HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c	(revision 36385)
@@ -98,4 +98,20 @@
 #define PACKET_TAG_VBOX        128
 
+#if defined(__FreeBSD_version) && __FreeBSD_version >= 800500
+# include <sys/jail.h>
+# include <net/vnet.h>
+
+# define VBOXCURVNET_SET(arg)		CURVNET_SET_QUIET(arg)
+# define VBOXCURVNET_SET_FROM_UCRED()	VBOXCURVNET_SET(CRED_TO_VNET(curthread->td_ucred))
+# define VBOXCURVNET_RESTORE()		CURVNET_RESTORE()
+
+#else /* !defined(__FreeBSD_version) || __FreeBSD_version < 800500 */
+
+# define VBOXCURVNET_SET(arg)
+# define VBOXCURVNET_SET_FROM_UCRED()
+# define VBOXCURVNET_RESTORE()
+
+#endif /* !defined(__FreeBSD_version) || __FreeBSD_version < 800500 */
+
 /*
  * Netgraph command list, we don't support any
@@ -323,4 +339,5 @@
     bool fActive;
 
+    VBOXCURVNET_SET(ifp->if_vnet);
     fActive = vboxNetFltTryRetainBusyActive(pThis);
 
@@ -347,4 +364,5 @@
             if (fActive)
                 vboxNetFltRelease(pThis, true /*fBusy*/);
+            VBOXCURVNET_RESTORE();
             return (0);
         }
@@ -364,4 +382,5 @@
             if (fActive)
                 vboxNetFltRelease(pThis, true /*fBusy*/);
+            VBOXCURVNET_RESTORE();
             return rc;
         }
@@ -378,4 +397,5 @@
     if (fActive)
         vboxNetFltRelease(pThis, true /*fBusy*/);
+    VBOXCURVNET_RESTORE();
     return (0);
 }
@@ -410,4 +430,5 @@
     PINTNETSG pSG;
 
+    VBOXCURVNET_SET(ifp->if_vnet);
     vboxNetFltRetain(pThis, true /* fBusy */);
     for (;;)
@@ -439,4 +460,5 @@
     }
     vboxNetFltRelease(pThis, true /* fBusy */);
+    VBOXCURVNET_RESTORE();
 }
 
@@ -453,4 +475,5 @@
     PINTNETSG pSG;
 
+    VBOXCURVNET_SET(ifp->if_vnet);
     vboxNetFltRetain(pThis, true /* fBusy */);
     for (;;)
@@ -482,4 +505,5 @@
     }
     vboxNetFltRelease(pThis, true /* fBusy */);
+    VBOXCURVNET_RESTORE();
 }
 
@@ -499,4 +523,5 @@
 
     ifp = ASMAtomicUoReadPtrT(&pThis->u.s.ifp, struct ifnet *);
+    VBOXCURVNET_SET(ifp->if_vnet);
 
     if (fDst & INTNETTRUNKDIR_WIRE)
@@ -540,4 +565,5 @@
         ifp->if_input(ifp, m);
     }
+    VBOXCURVNET_RESTORE();
     return VINF_SUCCESS;
 }
@@ -557,4 +583,5 @@
     RTSPINLOCKTMP Tmp = RTSPINLOCKTMP_INITIALIZER;
 
+    VBOXCURVNET_SET_FROM_UCRED();
     NOREF(pvContext);
     ifp = ifunit(pThis->szName);
@@ -603,4 +630,5 @@
         vboxNetFltRelease(pThis, true /*fBusy*/);
     }
+    VBOXCURVNET_RESTORE();
 
     return VINF_SUCCESS;
@@ -612,4 +640,5 @@
 
     ifp = ASMAtomicUoReadPtrT(&pThis->u.s.ifp, struct ifnet *);
+    VBOXCURVNET_SET(ifp->if_vnet);
     /*
      * Attempt to check if the interface is still there and re-initialize if
@@ -629,4 +658,5 @@
         vboxNetFltOsInitInstance(pThis, NULL);
     }
+    VBOXCURVNET_RESTORE();
 
     return !ASMAtomicUoReadBool(&pThis->fDisconnectedFromHost);
@@ -670,4 +700,5 @@
 
     ifp = ASMAtomicUoReadPtrT(&pThis->u.s.ifp, struct ifnet *);
+    VBOXCURVNET_SET(ifp->if_vnet);
     node = ASMAtomicUoReadPtrT(&pThis->u.s.node, node_p);
 
@@ -743,4 +774,5 @@
         NG_SEND_MSG_PATH(error, node, msg, path, 0);
     }
+    VBOXCURVNET_RESTORE();
 }
 
