diff options
author | 2018-03-28 09:54:00 +0000 | |
---|---|---|
committer | 2018-03-28 09:54:00 +0000 | |
commit | 1a33e2b7930f5b9efd73d2529ce565b210b4dc2f (patch) | |
tree | b6739a17f8cc9149f33b1417d8c060681addf062 | |
parent | Call FREF() right after fd_getfile() in sys_flock(). (diff) | |
download | wireguard-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.c | 8 |
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); |