mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-20 11:11:24 +00:00
Further minor cleanups to UNIX domain sockets:
- Staticize and locally prototype functions uipc_ctloutput(), unp_dispose(), unp_init(), and unp_externalize(), none of which have been required outside of uipc_usrreq.c since uipc_proto.c was removed. - Remove stale prototype for uipc_usrreq(), which has not existed in the code since 1997 - Forward declare and staticize uipc_usrreqs structure in uipc_usrreq.c and not un.h. - Comment on why uipc_connect2() is still non-static -- it is used directly by fifofs. - Remove stale comments, tidy up whitespace. MFC after: 3 days (where applicable)
This commit is contained in:
parent
0895aec30c
commit
0b36cd25fc
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=183572
@ -225,18 +225,22 @@ static struct rwlock unp_global_rwlock;
|
||||
#define UNP_PCB_UNLOCK(unp) mtx_unlock(&(unp)->unp_mtx)
|
||||
#define UNP_PCB_LOCK_ASSERT(unp) mtx_assert(&(unp)->unp_mtx, MA_OWNED)
|
||||
|
||||
static int uipc_ctloutput(struct socket *, struct sockopt *);
|
||||
static int unp_connect(struct socket *, struct sockaddr *,
|
||||
struct thread *);
|
||||
static int unp_connect2(struct socket *so, struct socket *so2, int);
|
||||
static void unp_disconnect(struct unpcb *unp, struct unpcb *unp2);
|
||||
static void unp_dispose(struct mbuf *);
|
||||
static void unp_shutdown(struct unpcb *);
|
||||
static void unp_drop(struct unpcb *, int);
|
||||
static void unp_gc(__unused void *, int);
|
||||
static void unp_scan(struct mbuf *, void (*)(struct file *));
|
||||
static void unp_discard(struct file *);
|
||||
static void unp_freerights(struct file **, int);
|
||||
static void unp_init(void);
|
||||
static int unp_internalize(struct mbuf **, struct thread *);
|
||||
static void unp_internalize_fp(struct file *);
|
||||
static int unp_externalize(struct mbuf *, struct mbuf **);
|
||||
static void unp_externalize_fp(struct file *);
|
||||
static struct mbuf *unp_addsockcred(struct thread *, struct mbuf *);
|
||||
|
||||
@ -244,6 +248,7 @@ static struct mbuf *unp_addsockcred(struct thread *, struct mbuf *);
|
||||
* Definitions of protocols supported in the LOCAL domain.
|
||||
*/
|
||||
static struct domain localdomain;
|
||||
static struct pr_usrreqs uipc_usrreqs;
|
||||
static struct protosw localsw[] = {
|
||||
{
|
||||
.pr_type = SOCK_STREAM,
|
||||
@ -523,6 +528,9 @@ uipc_close(struct socket *so)
|
||||
UNP_GLOBAL_WUNLOCK();
|
||||
}
|
||||
|
||||
/*
|
||||
* uipc_connect2() is not static as it is invoked directly by fifofs.
|
||||
*/
|
||||
int
|
||||
uipc_connect2(struct socket *so1, struct socket *so2)
|
||||
{
|
||||
@ -543,8 +551,6 @@ uipc_connect2(struct socket *so1, struct socket *so2)
|
||||
return (error);
|
||||
}
|
||||
|
||||
/* control is EOPNOTSUPP */
|
||||
|
||||
static void
|
||||
uipc_detach(struct socket *so)
|
||||
{
|
||||
@ -989,7 +995,7 @@ uipc_sockaddr(struct socket *so, struct sockaddr **nam)
|
||||
return (0);
|
||||
}
|
||||
|
||||
struct pr_usrreqs uipc_usrreqs = {
|
||||
static struct pr_usrreqs uipc_usrreqs = {
|
||||
.pru_abort = uipc_abort,
|
||||
.pru_accept = uipc_accept,
|
||||
.pru_attach = uipc_attach,
|
||||
@ -1008,7 +1014,7 @@ struct pr_usrreqs uipc_usrreqs = {
|
||||
.pru_close = uipc_close,
|
||||
};
|
||||
|
||||
int
|
||||
static int
|
||||
uipc_ctloutput(struct socket *so, struct sockopt *sopt)
|
||||
{
|
||||
struct unpcb *unp;
|
||||
@ -1498,7 +1504,6 @@ unp_drop(struct unpcb *unp, int errno)
|
||||
unp2 = unp->unp_conn;
|
||||
if (unp2 == NULL)
|
||||
return;
|
||||
|
||||
UNP_PCB_LOCK(unp2);
|
||||
unp_disconnect(unp, unp2);
|
||||
UNP_PCB_UNLOCK(unp2);
|
||||
@ -1523,7 +1528,7 @@ unp_freerights(struct file **rp, int fdcount)
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
unp_externalize(struct mbuf *control, struct mbuf **controlp)
|
||||
{
|
||||
struct thread *td = curthread; /* XXX */
|
||||
@ -1543,16 +1548,13 @@ unp_externalize(struct mbuf *control, struct mbuf **controlp)
|
||||
error = 0;
|
||||
if (controlp != NULL) /* controlp == NULL => free control messages */
|
||||
*controlp = NULL;
|
||||
|
||||
while (cm != NULL) {
|
||||
if (sizeof(*cm) > clen || cm->cmsg_len > clen) {
|
||||
error = EINVAL;
|
||||
break;
|
||||
}
|
||||
|
||||
data = CMSG_DATA(cm);
|
||||
datalen = (caddr_t)cm + cm->cmsg_len - (caddr_t)data;
|
||||
|
||||
if (cm->cmsg_level == SOL_SOCKET
|
||||
&& cm->cmsg_type == SCM_RIGHTS) {
|
||||
newfds = datalen / sizeof(struct file *);
|
||||
@ -1613,7 +1615,6 @@ unp_externalize(struct mbuf *control, struct mbuf **controlp)
|
||||
CMSG_DATA(mtod(*controlp, struct cmsghdr *)),
|
||||
datalen);
|
||||
}
|
||||
|
||||
controlp = &(*controlp)->m_next;
|
||||
|
||||
next:
|
||||
@ -1628,7 +1629,6 @@ unp_externalize(struct mbuf *control, struct mbuf **controlp)
|
||||
}
|
||||
|
||||
m_freem(control);
|
||||
|
||||
return (error);
|
||||
}
|
||||
|
||||
@ -1639,7 +1639,7 @@ unp_zone_change(void *tag)
|
||||
uma_zone_set_max(unp_zone, maxsockets);
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
unp_init(void)
|
||||
{
|
||||
|
||||
@ -1677,14 +1677,12 @@ unp_internalize(struct mbuf **controlp, struct thread *td)
|
||||
|
||||
error = 0;
|
||||
*controlp = NULL;
|
||||
|
||||
while (cm != NULL) {
|
||||
if (sizeof(*cm) > clen || cm->cmsg_level != SOL_SOCKET
|
||||
|| cm->cmsg_len > clen) {
|
||||
error = EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
data = CMSG_DATA(cm);
|
||||
datalen = (caddr_t)cm + cm->cmsg_len - (caddr_t)data;
|
||||
|
||||
@ -1699,7 +1697,6 @@ unp_internalize(struct mbuf **controlp, struct thread *td)
|
||||
error = ENOBUFS;
|
||||
goto out;
|
||||
}
|
||||
|
||||
cmcred = (struct cmsgcred *)
|
||||
CMSG_DATA(mtod(*controlp, struct cmsghdr *));
|
||||
cmcred->cmcred_pid = p->p_pid;
|
||||
@ -1707,7 +1704,7 @@ unp_internalize(struct mbuf **controlp, struct thread *td)
|
||||
cmcred->cmcred_gid = td->td_ucred->cr_rgid;
|
||||
cmcred->cmcred_euid = td->td_ucred->cr_uid;
|
||||
cmcred->cmcred_ngroups = MIN(td->td_ucred->cr_ngroups,
|
||||
CMGROUP_MAX);
|
||||
CMGROUP_MAX);
|
||||
for (i = 0; i < cmcred->cmcred_ngroups; i++)
|
||||
cmcred->cmcred_groups[i] =
|
||||
td->td_ucred->cr_groups[i];
|
||||
@ -1739,8 +1736,8 @@ unp_internalize(struct mbuf **controlp, struct thread *td)
|
||||
}
|
||||
|
||||
/*
|
||||
* Now replace the integer FDs with pointers to
|
||||
* the associated global file table entry..
|
||||
* Now replace the integer FDs with pointers to the
|
||||
* associated global file table entry..
|
||||
*/
|
||||
newlen = oldfds * sizeof(struct file *);
|
||||
*controlp = sbcreatecontrol(NULL, newlen,
|
||||
@ -1750,7 +1747,6 @@ unp_internalize(struct mbuf **controlp, struct thread *td)
|
||||
error = E2BIG;
|
||||
goto out;
|
||||
}
|
||||
|
||||
fdp = data;
|
||||
rp = (struct file **)
|
||||
CMSG_DATA(mtod(*controlp, struct cmsghdr *));
|
||||
@ -1780,7 +1776,6 @@ unp_internalize(struct mbuf **controlp, struct thread *td)
|
||||
}
|
||||
|
||||
controlp = &(*controlp)->m_next;
|
||||
|
||||
if (CMSG_SPACE(datalen) < clen) {
|
||||
clen -= CMSG_SPACE(datalen);
|
||||
cm = (struct cmsghdr *)
|
||||
@ -1793,7 +1788,6 @@ unp_internalize(struct mbuf **controlp, struct thread *td)
|
||||
|
||||
out:
|
||||
m_freem(control);
|
||||
|
||||
return (error);
|
||||
}
|
||||
|
||||
@ -1807,7 +1801,6 @@ unp_addsockcred(struct thread *td, struct mbuf *control)
|
||||
int i;
|
||||
|
||||
ngroups = MIN(td->td_ucred->cr_ngroups, CMGROUP_MAX);
|
||||
|
||||
m = sbcreatecontrol(NULL, SOCKCREDSIZE(ngroups), SCM_CREDS, SOL_SOCKET);
|
||||
if (m == NULL)
|
||||
return (control);
|
||||
@ -1844,7 +1837,6 @@ unp_addsockcred(struct thread *td, struct mbuf *control)
|
||||
|
||||
/* Prepend it to the head. */
|
||||
m->m_next = control;
|
||||
|
||||
return (m);
|
||||
}
|
||||
|
||||
@ -2047,7 +2039,7 @@ unp_gc(__unused void *arg, int pending)
|
||||
free(unref, M_TEMP);
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
unp_dispose(struct mbuf *m)
|
||||
{
|
||||
|
||||
|
11
sys/sys/un.h
11
sys/sys/un.h
@ -58,18 +58,9 @@ struct sockaddr_un {
|
||||
#define LOCAL_CONNWAIT 0x004 /* connects block until accepted */
|
||||
|
||||
#ifdef _KERNEL
|
||||
struct mbuf;
|
||||
struct socket;
|
||||
struct sockopt;
|
||||
|
||||
struct socket;
|
||||
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);
|
||||
void unp_dispose(struct mbuf *m);
|
||||
int unp_externalize(struct mbuf *mbuf, struct mbuf **controlp);
|
||||
void unp_init(void);
|
||||
extern struct pr_usrreqs uipc_usrreqs;
|
||||
|
||||
#else /* !_KERNEL */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user