summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsemarie <semarie@openbsd.org>2015-11-19 05:38:26 +0000
committersemarie <semarie@openbsd.org>2015-11-19 05:38:26 +0000
commitfcdddd35ba62de68804ea6e6523c02f45e9c1aad (patch)
tree23d6e72946c05b87fbc7cae224f0da2e38dc51b2
parentRemove a sixteen-year-old testing macro. (diff)
downloadwireguard-openbsd-fcdddd35ba62de68804ea6e6523c02f45e9c1aad.tar.xz
wireguard-openbsd-fcdddd35ba62de68804ea6e6523c02f45e9c1aad.zip
corrects leaks refs to files introduced by my previous commit for pledge_socket.
reported by Mateusz Guzik with a diff. this one is a slightly modified version. ok deraadt@
-rw-r--r--sys/kern/uipc_syscalls.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/sys/kern/uipc_syscalls.c b/sys/kern/uipc_syscalls.c
index 122d51f2a0a..c4b9e895f3e 100644
--- a/sys/kern/uipc_syscalls.c
+++ b/sys/kern/uipc_syscalls.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: uipc_syscalls.c,v 1.125 2015/11/18 08:24:22 semarie Exp $ */
+/* $OpenBSD: uipc_syscalls.c,v 1.126 2015/11/19 05:38:26 semarie Exp $ */
/* $NetBSD: uipc_syscalls.c,v 1.19 1996/02/09 19:00:48 christos Exp $ */
/*
@@ -169,17 +169,18 @@ sys_bind(struct proc *p, void *v, register_t *retval)
error = pledge_socket(p, so->so_proto->pr_domain->dom_family,
so->so_state);
if (error)
- return (error);
+ goto out;
error = sockargs(&nam, SCARG(uap, name), SCARG(uap, namelen),
MT_SONAME);
- if (error == 0) {
+ if (error)
+ goto out;
#ifdef KTRACE
- if (KTRPOINT(p, KTR_STRUCT))
- ktrsockaddr(p, mtod(nam, caddr_t), SCARG(uap, namelen));
+ if (KTRPOINT(p, KTR_STRUCT))
+ ktrsockaddr(p, mtod(nam, caddr_t), SCARG(uap, namelen));
#endif
- error = sobind(so, nam, p);
- m_freem(nam);
- }
+ error = sobind(so, nam, p);
+ m_freem(nam);
+out:
FRELE(fp, p);
return (error);
}
@@ -202,8 +203,9 @@ sys_listen(struct proc *p, void *v, register_t *retval)
error = pledge_socket(p, so->so_proto->pr_domain->dom_family,
so->so_state);
if (error)
- return (error);
+ goto out;
error = solisten(so, SCARG(uap, backlog));
+out:
FRELE(fp, p);
return (error);
}
@@ -1091,10 +1093,10 @@ sys_getpeername(struct proc *p, void *v, register_t *retval)
error = pledge_socket(p, so->so_proto->pr_domain->dom_family,
so->so_state);
if (error)
- return (error);
+ goto bad;
if ((so->so_state & SS_ISCONNECTED) == 0) {
- FRELE(fp, p);
- return (ENOTCONN);
+ error = ENOTCONN;
+ goto bad;
}
error = copyin(SCARG(uap, alen), &len, sizeof (len));
if (error)