From 31c9709852e2acebdd8c7dbc8b1c2af2921e31e3 Mon Sep 17 00:00:00 2001
From: Kanonenvogel <kanonenvogel.87g@gmail.com>
Date: Tue, 14 Apr 2015 04:40:27 +0400
Subject: [PATCH 1/4] getsock() api modification

---
 compat/linux/linux_socket.c |  2 +-
 kern/subr_log.c             |  2 +-
 kern/uipc_socket.c          |  2 +-
 kern/uipc_syscalls.c        | 26 +++++++++++++-------------
 nfs/nfs_syscalls.c          |  2 +-
 sys/filedesc.h              |  2 +-
 6 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/compat/linux/linux_socket.c b/compat/linux/linux_socket.c
index 1c16aab..2b0d6d5 100644
--- a/compat/linux/linux_socket.c
+++ b/compat/linux/linux_socket.c
@@ -937,7 +937,7 @@ linux_setsockopt(p, v, retval)
 	if ((error = copyin((caddr_t) uap, (caddr_t) &lsa, sizeof lsa)))
 		return error;
 
-	if ((error = getsock(p->p_fd, lsa.s, &fp)) != 0)
+	if ((error = getsock(p, lsa.s, &fp)) != 0)
 		return error;
 	
 	level = linux_to_bsd_sopt_level(lsa.level);
diff --git a/kern/subr_log.c b/kern/subr_log.c
index dbae289..3fb4983 100644
--- a/kern/subr_log.c
+++ b/kern/subr_log.c
@@ -335,7 +335,7 @@ logioctl(dev_t dev, u_long com, caddr_t data, int flag, struct proc *p)
 	case LIOCSFD:
 		if ((error = suser(p, 0)) != 0)
 			return (error);
-		if ((error = getsock(p->p_fd, *(int *)data, &fp)) != 0)
+		if ((error = getsock(p, *(int *)data, &fp)) != 0)
 			return (error);
 		if (syslogf)
 			FRELE(syslogf, p);
diff --git a/kern/uipc_socket.c b/kern/uipc_socket.c
index e7a1f94..2582e23 100644
--- a/kern/uipc_socket.c
+++ b/kern/uipc_socket.c
@@ -1077,7 +1077,7 @@ sosplice(struct socket *so, int fd, off_t max, struct timeval *tv)
 		return (EINVAL);
 
 	/* Find sosp, the drain socket where data will be spliced into. */
-	if ((error = getsock(curproc->p_fd, fd, &fp)) != 0)
+	if ((error = getsock(curproc, fd, &fp)) != 0)
 		return (error);
 	sosp = fp->f_data;
 	if (sosp->so_sp == NULL)
diff --git a/kern/uipc_syscalls.c b/kern/uipc_syscalls.c
index 1d5a7ae..bcaaadd 100644
--- a/kern/uipc_syscalls.c
+++ b/kern/uipc_syscalls.c
@@ -121,7 +121,7 @@ sys_bind(struct proc *p, void *v, register_t *retval)
 	struct mbuf *nam;
 	int error;
 
-	if ((error = getsock(p->p_fd, SCARG(uap, s), &fp)) != 0)
+	if ((error = getsock(p, SCARG(uap, s), &fp)) != 0)
 		return (error);
 	error = sockargs(&nam, SCARG(uap, name), SCARG(uap, namelen),
 	    MT_SONAME);
@@ -148,7 +148,7 @@ sys_listen(struct proc *p, void *v, register_t *retval)
 	struct file *fp;
 	int error;
 
-	if ((error = getsock(p->p_fd, SCARG(uap, s), &fp)) != 0)
+	if ((error = getsock(p, SCARG(uap, s), &fp)) != 0)
 		return (error);
 	error = solisten(fp->f_data, SCARG(uap, backlog));
 	FRELE(fp, p);
@@ -199,7 +199,7 @@ doaccept(struct proc *p, int sock, struct sockaddr *name, socklen_t *anamelen,
 
 	if (name && (error = copyin(anamelen, &namelen, sizeof (namelen))))
 		return (error);
-	if ((error = getsock(fdp, sock, &fp)) != 0)
+	if ((error = getsock(p, sock, &fp)) != 0)
 		return (error);
 	headfp = fp;
 	s = splsoftnet();
@@ -316,7 +316,7 @@ sys_connect(struct proc *p, void *v, register_t *retval)
 	struct mbuf *nam = NULL;
 	int error, s;
 
-	if ((error = getsock(p->p_fd, SCARG(uap, s), &fp)) != 0)
+	if ((error = getsock(p, SCARG(uap, s), &fp)) != 0)
 		return (error);
 	so = fp->f_data;
 	if ((so->so_state & SS_NBIO) && (so->so_state & SS_ISCONNECTING)) {
@@ -519,7 +519,7 @@ sendit(struct proc *p, int s, struct msghdr *mp, int flags, register_t *retsize)
 
 	to = NULL;
 
-	if ((error = getsock(p->p_fd, s, &fp)) != 0)
+	if ((error = getsock(p, s, &fp)) != 0)
 		return (error);
 	auio.uio_iov = mp->msg_iov;
 	auio.uio_iovcnt = mp->msg_iovlen;
@@ -685,7 +685,7 @@ recvit(struct proc *p, int s, struct msghdr *mp, caddr_t namelenp,
 	int iovlen = 0;
 #endif
 
-	if ((error = getsock(p->p_fd, s, &fp)) != 0)
+	if ((error = getsock(p, s, &fp)) != 0)
 		return (error);
 	auio.uio_iov = mp->msg_iov;
 	auio.uio_iovcnt = mp->msg_iovlen;
@@ -804,7 +804,7 @@ sys_shutdown(struct proc *p, void *v, register_t *retval)
 	struct file *fp;
 	int error;
 
-	if ((error = getsock(p->p_fd, SCARG(uap, s), &fp)) != 0)
+	if ((error = getsock(p, SCARG(uap, s), &fp)) != 0)
 		return (error);
 	error = soshutdown(fp->f_data, SCARG(uap, how));
 	FRELE(fp, p);
@@ -826,7 +826,7 @@ sys_setsockopt(struct proc *p, void *v, register_t *retval)
 	struct mbuf *m = NULL;
 	int error;
 
-	if ((error = getsock(p->p_fd, SCARG(uap, s), &fp)) != 0)
+	if ((error = getsock(p, SCARG(uap, s), &fp)) != 0)
 		return (error);
 	if (SCARG(uap, valsize) > MCLBYTES) {
 		error = EINVAL;
@@ -877,7 +877,7 @@ sys_getsockopt(struct proc *p, void *v, register_t *retval)
 	socklen_t valsize;
 	int error;
 
-	if ((error = getsock(p->p_fd, SCARG(uap, s), &fp)) != 0)
+	if ((error = getsock(p, SCARG(uap, s), &fp)) != 0)
 		return (error);
 	if (SCARG(uap, val)) {
 		error = copyin(SCARG(uap, avalsize),
@@ -921,7 +921,7 @@ sys_getsockname(struct proc *p, void *v, register_t *retval)
 	socklen_t len;
 	int error;
 
-	if ((error = getsock(p->p_fd, SCARG(uap, fdes), &fp)) != 0)
+	if ((error = getsock(p, SCARG(uap, fdes), &fp)) != 0)
 		return (error);
 	error = copyin(SCARG(uap, alen), &len, sizeof (len));
 	if (error)
@@ -957,7 +957,7 @@ sys_getpeername(struct proc *p, void *v, register_t *retval)
 	socklen_t len;
 	int error;
 
-	if ((error = getsock(p->p_fd, SCARG(uap, fdes), &fp)) != 0)
+	if ((error = getsock(p, SCARG(uap, fdes), &fp)) != 0)
 		return (error);
 	so = fp->f_data;
 	if ((so->so_state & SS_ISCONNECTED) == 0) {
@@ -1017,11 +1017,11 @@ sockargs(struct mbuf **mp, const void *buf, size_t buflen, int type)
 }
 
 int
-getsock(struct filedesc *fdp, int fdes, struct file **fpp)
+getsock(struct proc *p, int fdes, struct file **fpp)
 {
 	struct file *fp;
 
-	if ((fp = fd_getfile(fdp, fdes)) == NULL)
+	if ((fp = fd_getfile(p->p_fd, fdes)) == NULL)
 		return (EBADF);
 	if (fp->f_type != DTYPE_SOCKET)
 		return (ENOTSOCK);
diff --git a/nfs/nfs_syscalls.c b/nfs/nfs_syscalls.c
index da84ada..ffb9b39 100644
--- a/nfs/nfs_syscalls.c
+++ b/nfs/nfs_syscalls.c
@@ -167,7 +167,7 @@ sys_nfssvc(struct proc *p, void *v, register_t *retval)
 		if (error)
 			return (error);
 
-		error = getsock(p->p_fd, nfsdarg.sock, &fp);
+		error = getsock(p, nfsdarg.sock, &fp);
 		if (error)
 			return (error);
 
diff --git a/sys/filedesc.h b/sys/filedesc.h
index b383a38..867aed5 100644
--- a/sys/filedesc.h
+++ b/sys/filedesc.h
@@ -135,7 +135,7 @@ void	fdcloseexec(struct proc *);
 struct file *fd_getfile(struct filedesc *, int fd);
 
 int	closef(struct file *, struct proc *);
-int	getsock(struct filedesc *, int, struct file **);
+int	getsock(struct proc *, int, struct file **);
 
 #define	fdplock(fdp)	rw_enter_write(&(fdp)->fd_lock)
 #define	fdpunlock(fdp)	rw_exit_write(&(fdp)->fd_lock)
-- 
1.9.3

