aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorRobert Watson <rwatson@FreeBSD.org>2004-03-31 01:41:30 +0000
committerRobert Watson <rwatson@FreeBSD.org>2004-03-31 01:41:30 +0000
commitdb48c0d2540a87b2f675860d60422b77d708c58f (patch)
treea2166426af7223990afbf9b50fb2719c9e2a1447 /sys
parent236efae6a954eaf6323f57466bc753fcdfefc9e2 (diff)
downloadsrc-db48c0d2540a87b2f675860d60422b77d708c58f.tar.gz
src-db48c0d2540a87b2f675860d60422b77d708c58f.zip
Export uipc_connect2() from uipc_usrreq.c instead of unp_connect2(),
and consume that interface in portalfs and fifofs instead. In the new world order, unp_connect2() assumes that the unpcb mutex is held, whereas uipc_connect2() validates that the passed sockets are UNIX domain sockets, then grabs the mutex. NB: the portalfs and fifofs code gets down and dirty with UNIX domain sockets. Maybe this is a bad thing.
Notes
Notes: svn path=/head/; revision=127652
Diffstat (limited to 'sys')
-rw-r--r--sys/fs/fifofs/fifo_vnops.c2
-rw-r--r--sys/fs/portalfs/portal_vnops.c2
-rw-r--r--sys/kern/uipc_usrreq.c5
-rw-r--r--sys/sys/un.h2
4 files changed, 6 insertions, 5 deletions
diff --git a/sys/fs/fifofs/fifo_vnops.c b/sys/fs/fifofs/fifo_vnops.c
index e7112d09ff74..c9d0fa2c7291 100644
--- a/sys/fs/fifofs/fifo_vnops.c
+++ b/sys/fs/fifofs/fifo_vnops.c
@@ -201,7 +201,7 @@ fifo_open(ap)
if (error)
goto fail2;
fip->fi_writesock = wso;
- error = unp_connect2(wso, rso);
+ error = uipc_connect2(wso, rso);
if (error) {
(void)soclose(wso);
fail2:
diff --git a/sys/fs/portalfs/portal_vnops.c b/sys/fs/portalfs/portal_vnops.c
index a8c31c84dc7d..b43936dfa991 100644
--- a/sys/fs/portalfs/portal_vnops.c
+++ b/sys/fs/portalfs/portal_vnops.c
@@ -203,7 +203,7 @@ portal_connect(so, so2)
M_NOWAIT);
so2 = so3;
- return (unp_connect2(so, so2));
+ return (uipc_connect2(so, so2));
}
static int
diff --git a/sys/kern/uipc_usrreq.c b/sys/kern/uipc_usrreq.c
index 4de0ac46bfa6..7ad792939f7c 100644
--- a/sys/kern/uipc_usrreq.c
+++ b/sys/kern/uipc_usrreq.c
@@ -89,6 +89,7 @@ static int unp_attach(struct socket *);
static void unp_detach(struct unpcb *);
static int unp_bind(struct unpcb *,struct sockaddr *, struct thread *);
static int unp_connect(struct socket *,struct sockaddr *, struct thread *);
+static int unp_connect2(struct socket *so, struct socket *so2);
static void unp_disconnect(struct unpcb *);
static void unp_shutdown(struct unpcb *);
static void unp_drop(struct unpcb *, int);
@@ -167,7 +168,7 @@ uipc_connect(struct socket *so, struct sockaddr *nam, struct thread *td)
return (unp_connect(so, nam, curthread));
}
-static int
+int
uipc_connect2(struct socket *so1, struct socket *so2)
{
struct unpcb *unp = sotounpcb(so1);
@@ -765,7 +766,7 @@ bad:
return (error);
}
-int
+static int
unp_connect2(so, so2)
register struct socket *so;
register struct socket *so2;
diff --git a/sys/sys/un.h b/sys/sys/un.h
index 12ca3605fff5..854e0d0040c7 100644
--- a/sys/sys/un.h
+++ b/sys/sys/un.h
@@ -64,10 +64,10 @@ struct mbuf;
struct socket;
struct sockopt;
+int uipc_connect2(struct socket *so1, struct socket *so2);
int uipc_ctloutput(struct socket *so, struct sockopt *sopt);
int uipc_usrreq(struct socket *so, int req, struct mbuf *m,
struct mbuf *nam, struct mbuf *control);
-int unp_connect2(struct socket *so, struct socket *so2);
void unp_dispose(struct mbuf *m);
int unp_externalize(struct mbuf *mbuf, struct mbuf **controlp);
void unp_init(void);