summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormpi <mpi@openbsd.org>2018-03-28 09:54:00 +0000
committermpi <mpi@openbsd.org>2018-03-28 09:54:00 +0000
commit1a33e2b7930f5b9efd73d2529ce565b210b4dc2f (patch)
treeb6739a17f8cc9149f33b1417d8c060681addf062
parentCall FREF() right after fd_getfile() in sys_flock(). (diff)
downloadwireguard-openbsd-1a33e2b7930f5b9efd73d2529ce565b210b4dc2f.tar.xz
wireguard-openbsd-1a33e2b7930f5b9efd73d2529ce565b210b4dc2f.zip
Call FREF() right after fd_getfile() in getsock().
This ensure that all operations manipulating a 'struct file *' do so with a properly refcounted element. ok visa@, bluhm@
-rw-r--r--sys/kern/uipc_syscalls.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/kern/uipc_syscalls.c b/sys/kern/uipc_syscalls.c
index cd494151e75..a27c09089ff 100644
--- a/sys/kern/uipc_syscalls.c
+++ b/sys/kern/uipc_syscalls.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: uipc_syscalls.c,v 1.167 2018/02/21 09:30:02 mpi Exp $ */
+/* $OpenBSD: uipc_syscalls.c,v 1.168 2018/03/28 09:54:00 mpi Exp $ */
/* $NetBSD: uipc_syscalls.c,v 1.19 1996/02/09 19:00:48 christos Exp $ */
/*
@@ -1160,9 +1160,11 @@ getsock(struct proc *p, int fdes, struct file **fpp)
if ((fp = fd_getfile(p->p_fd, fdes)) == NULL)
return (EBADF);
- if (fp->f_type != DTYPE_SOCKET)
- return (ENOTSOCK);
FREF(fp);
+ if (fp->f_type != DTYPE_SOCKET) {
+ FRELE(fp, p);
+ return (ENOTSOCK);
+ }
*fpp = fp;
return (0);