diff options
author | Robert Watson <rwatson@FreeBSD.org> | 2004-03-31 01:41:30 +0000 |
---|---|---|
committer | Robert Watson <rwatson@FreeBSD.org> | 2004-03-31 01:41:30 +0000 |
commit | db48c0d2540a87b2f675860d60422b77d708c58f (patch) | |
tree | a2166426af7223990afbf9b50fb2719c9e2a1447 /sys | |
parent | 236efae6a954eaf6323f57466bc753fcdfefc9e2 (diff) | |
download | src-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.c | 2 | ||||
-rw-r--r-- | sys/fs/portalfs/portal_vnops.c | 2 | ||||
-rw-r--r-- | sys/kern/uipc_usrreq.c | 5 | ||||
-rw-r--r-- | sys/sys/un.h | 2 |
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); |