PERFORCE change 167725 for review

Marko Zec zec at FreeBSD.org
Mon Aug 24 12:06:21 UTC 2009


http://perforce.freebsd.org/chv.cgi?CH=167725

Change 167725 by zec at zec_tpx32 on 2009/08/24 12:06:15

	Unbreak build.

Affected files ...

.. //depot/projects/vimage/src/sys/kern/vfs_export.c#24 edit
.. //depot/projects/vimage/src/sys/kern/vfs_lookup.c#28 edit
.. //depot/projects/vimage/src/sys/net/bpf.c#42 edit

Differences ...

==== //depot/projects/vimage/src/sys/kern/vfs_export.c#24 (text+ko) ====

@@ -54,6 +54,7 @@
 #include <sys/vnode.h>
 
 #include <net/radix.h>
+#include <net/vnet.h>
 
 static MALLOC_DEFINE(M_NETADDR, "export_host", "Export host address structure");
 

==== //depot/projects/vimage/src/sys/kern/vfs_lookup.c#28 (text+ko) ====

@@ -59,6 +59,8 @@
 #include <sys/ktrace.h>
 #endif
 
+#include <net/vnet.h>
+
 #include <security/audit/audit.h>
 #include <security/mac/mac_framework.h>
 
@@ -77,8 +79,12 @@
 #endif
 
 #ifdef IMUNES_SYMLINK_HACK
-SYSCTL_V_INT(V_PROCG, vprocg, _vfs, OID_AUTO, morphing_symlinks, CTLFLAG_RW,
-    morphing_symlinks, 0, "Resolve @ to vimage name in symlinks");
+static VNET_DEFINE(int, morphing_symlinks);
+#define	V_morphing_symlinks	VNET(morphing_symlinks)
+
+SYSCTL_VNET_INT(_vfs, OID_AUTO, morphing_symlinks, CTLFLAG_RW,
+    &VNET_NAME(morphing_symlinks), 0,
+    "Resolve @ to vimage name in symlinks");
 #endif
 
 /*
@@ -142,9 +148,6 @@
 	struct thread *td = cnp->cn_thread;
 	struct proc *p = td->td_proc;
 	int vfslocked;
-#ifdef IMUNES_SYMLINK_HACK
-	INIT_VPROCG(TD_TO_VPROCG(td));
-#endif
 
 	KASSERT((cnp->cn_flags & MPSAFE) != 0 || mtx_owned(&Giant) != 0,
 	    ("NOT MPSAFE and Giant not held"));
@@ -348,7 +351,7 @@
 #ifdef IMUNES_SYMLINK_HACK
 		if (V_morphing_symlinks) {
 			char *sp = strchr(cp, '@');
-			int vnamelen = strlen(TD_TO_VIMAGE(td)->vi_name);
+			int vnamelen = strlen(td->td_ucred->cr_prison->pr_name);
 
 			if (sp) {
 				if (vnamelen >= auio.uio_resid) {
@@ -359,7 +362,8 @@
 				}
 				bcopy(sp + 1, sp + vnamelen,
 				    linklen - (sp - cp));
-				bcopy(TD_TO_VIMAGE(td)->vi_name, sp, vnamelen);
+				bcopy(td->td_ucred->cr_prison->pr_name,
+				    sp, vnamelen);
 				linklen += (vnamelen - 1);
 			}
 		}

==== //depot/projects/vimage/src/sys/net/bpf.c#42 (text+ko) ====

@@ -44,6 +44,7 @@
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/conf.h>
+#include <sys/ctype.h>
 #include <sys/fcntl.h>
 #include <sys/jail.h>
 #include <sys/malloc.h>
@@ -1435,29 +1436,30 @@
 	struct bpf_if *bp;
 	struct ifnet *theywant;
 
-#define IMUNES_BPF_HACK
-#if defined(VIMAGE) && defined(IMUNES_BPF_HACK)
+#define XVNET_BPF_SNOOPING
+#if defined(VIMAGE) && defined(XVNET_BPF_SNOOPING)
 	struct vnet *target_vnet = curvnet;
 	char *c;
 
-	/* Hack to support tapping in foreign vnets */
+	/* Attempt to attach to an ifnet in a foreign vnet, specified as @ */
 	c = rindex(ifr->ifr_name, '@');
 	if ( c != NULL ) {
-printf("bpf_setif: %s\n", c);
-		struct vimage *target_vimage;
+		struct prison *target_pr;
 
 		*c++ = 0;
-		target_vimage = vimage_by_name(TD_TO_VIMAGE(curthread), c);
-		if (target_vimage == NULL)
+		if (!isascii(*c) && !isdigit(*c))
+			return ENXIO;
+		target_pr = prison_find_name(curthread->td_ucred->cr_prison, c);
+		if (target_pr == NULL)
 			return ENXIO;
-		target_vnet = target_vimage->v_net;
+		target_vnet = target_pr->pr_vnet;
 	}
 	CURVNET_SET_QUIET(target_vnet);
 #endif
 
 	theywant = ifunit(ifr->ifr_name);
 	if (theywant == NULL || theywant->if_bpf == NULL) {
-#if defined(VIMAGE) && defined(IMUNES_BPF_HACK)
+#if defined(VIMAGE) && defined(XVNET_BPF_SNOOPING)
 		CURVNET_RESTORE();
 #endif
 		return (ENXIO);
@@ -1501,7 +1503,7 @@
 	BPFD_LOCK(d);
 	reset_d(d);
 	BPFD_UNLOCK(d);
-#if defined(VIMAGE) && defined(IMUNES_BPF_HACK)
+#if defined(VIMAGE) && defined(XVNET_BPF_SNOOPING)
 	CURVNET_RESTORE();
 #endif
 	return (0);


More information about the p4-projects mailing list