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